如果新值为None

时间:2019-08-02 18:14:48

标签: python python-3.x

我需要为一堆变量赋值。如果值为None,则该变量应保持放置状态,但如果存在值,则应对其进行赋值。明显的方法是

if v is not None:
    x = v

,但是一遍又一遍地重复此构造会使代码变得丑陋。做到这一点

 x = v if v is not None else x

但是它执行了不必要的分配操作,这是一个经常执行的代码路径。

有更好的方法吗?还是python优化了类似的东西并且没有分配?

1 个答案:

答案 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

话虽如此,请选择更具可读性或接受性的内容。我认为在任何规模上都不会注意到两个说明。