Mic*_*ers 0 python if-statement list
在Python中,我经常使用以下构造:
x = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
y = x[v] if v in x.keys() else None
Run Code Online (Sandbox Code Playgroud)
其中v通常是字典值之一,如果密钥存在,则y获取字典的值,否则为None.
我想知道这是否是一个理想的构造或是否可以增强?
x [v]可以是上面的值,但我也使用类似的构造来调用函数,具体取决于v的值,如:
{'a': self.f1, 'b': self.f2, 'c': self.f3, 'd': self.f4}[v]()
Run Code Online (Sandbox Code Playgroud)
通常你会使用dict.get():
y = x.get(v)
Run Code Online (Sandbox Code Playgroud)
.get()如果v字典中不存在则返回默认参数,但如果省略None则返回.
即使您使用显式密钥测试,也不需要使用.keys():
y = x[v] if v in x else None
Run Code Online (Sandbox Code Playgroud)
有趣的是,条件表达式选项稍微快一点:
>>> [x.get(v) for v in 'acxz'] # demonstration of the test; two hits, two misses
[1, 3, None, None]
>>> timeit.timeit("for v in 'acxz': x.get(v)", 'from __main__ import x')
0.8269917964935303
>>> timeit.timeit("for v in 'acxz': x[v] if v in x else None", 'from __main__ import x')
0.67330002784729
Run Code Online (Sandbox Code Playgroud)
直到你避免属性查找.get():
>>> timeit.timeit("for v in 'acxz': get(v)", 'from __main__ import x; get = x.get')
0.6585619449615479
Run Code Online (Sandbox Code Playgroud)
所以如果速度很重要,请存储对.get()方法的引用(注意get = x.get赋值).
| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |