我将简化Python中一些null/false检查,格式如下:
这个:
可以简化为这样:
但是,Python的原地
所以问题是:Python是否有inplace或?此外,您是否认为像这样进行简化的空/假检查会出现问题?
免责声明
我知道
这个:
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或?此外,您是否认为像这样进行简化的空/假检查会出现问题?
免责声明
我知道
a is not None
与not a
不同。前者评估a是否确实不是一个None
值,而后者评估a是否不是可以评估为False
(如False
、None
、0
、''
(空字符串)、[]
、{}
(空集合)等)的东西。
name |= val
相当于name = name | val
(或多或少)。|
不是布尔or
运算符,而是位或运算符。 - Martijn Pieters