我正在以下形式简化python中的一些空/假检查:
这个:
if not a:
a = 'foo'
可以简化为:
a = a or 'foo'
而且,看上面是自然地尝试进一步简化,如下所示:
a |= 'foo'
但是,python的就地or
实际上是就地按位或:
a = None
a |= 'foo'
=> TypeError: unsupported operand type(s) for |=: 'NoneType' and 'str'
a = 'foo'
a |= 'bar'
=> TypeError: unsupported operand type(s) for |=: 'str' and 'str'
a = 1
a |= 2
print a
=> 3
a = 2
a |= 3
print a
=> 3
所以,问题是:Python 是否有一个 inplace 或?此外,您是否看到像这样进行简化的 null/false 检查时遇到问题?
免责声明
我知道这a is not None
与not a
. 前者评估 a 是否确实不是一个None
值,而后者评估 a 是否不是评估为False
(如False
, None
, 0
, ''
(空字符串),[]
, {}
(空集合)等)