我发现自己经常写这样的东西而且看起来太罗嗦了:
obj = my_dict.get('obj')
if obj:
var = obj
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?也许在一条线?
Kri*_*ass 11
该get函数采用第二个参数,默认值:
get(key [,default])如果key在字典中,则返回key的值,否则返回default.如果未给出default,则默认为None,因此此方法永远不会引发KeyError.
http://docs.python.org/library/stdtypes.html
因此,您可以使用以下内容复制问题的代码:
var = my_dict.get('obj', var)
Run Code Online (Sandbox Code Playgroud)
没有一种干净的方法可以在一行中替换此代码,因为它有条件地绑定了 name var。在var已经定义的情况下,这种单行是可能的:
var = my_dict['obj'] if 'obj' in my_dict and my_dict['obj'] else var
Run Code Online (Sandbox Code Playgroud)
但是,如果var尚未定义,这仍然与原始代码略有不同:单行NameError代码正在引发 a并且原始代码只是继续var未绑定。
请注意,当值存在但为假时,其他答案的行为会有所不同。
obj = my_dict.get('obj')
if obj: # <-- test on truthiness of obj
# if we are here, it means:
# 1. my_dict has key 'obj', AND...
# 2. at least one of the following,
# my_dict['obj'].__bool__() returned True (__nonzero__ for Python 2)
# OR
# my_dict['obj'].__len__() returned result > 0
# OR
# my_dict['obj'] is not None, and has neither __bool__ nor __len__ defined
var = obj
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3047 次 |
| 最近记录: |