我需要为一堆变量赋值。如果值为None,则该变量应保持放置状态,但如果存在值,则应对其进行赋值。明显的方法是
if v is not None:
x = v
,但是一遍又一遍地重复此构造会使代码变得丑陋。做到这一点
x = v if v is not None else x
但是它执行了不必要的分配操作,这是一个经常执行的代码路径。
有更好的方法吗?还是python优化了类似的东西并且没有分配?
答案 0 :(得分:0)
使用dis
模块,我们可以检查组装好的python。
import dis
def a(v):
if v is not None:
x = v
def b(v):
x = v if v is not None else x
第二种方法似乎稍微快一些,尽管有些微。
>>> dis.dis(a)
2 0 LOAD_FAST 0 (v)
2 LOAD_CONST 0 (None)
4 COMPARE_OP 9 (is not)
6 POP_JUMP_IF_FALSE 12
8 LOAD_FAST 0 (v)
10 JUMP_FORWARD 2 (to 14)
>> 12 LOAD_FAST 1 (x)
>> 14 STORE_FAST 1 (x)
16 LOAD_CONST 0 (None)
18 RETURN_VALUE
>>> dis.dis(b)
4 0 LOAD_FAST 0 (v)
2 LOAD_CONST 0 (None)
4 COMPARE_OP 9 (is not)
6 POP_JUMP_IF_FALSE 12
5 8 LOAD_FAST 0 (v)
10 STORE_FAST 1 (x)
>> 12 LOAD_CONST 0 (None)
14 RETURN_VALUE
话虽如此,请选择更具可读性或接受性的内容。我认为在任何规模上都不会注意到两个说明。