什么不int(x)呢?

时间:2016-01-06 17:22:21

标签: python boolean-expression

我无法在诸如

之类的陈述中理解not的含义
not int(x)

如果True等于x,则评估为0。 但如果x是任何其他数字,则评估为False

我想解释一下这种行为,谢谢。

1 个答案:

答案 0 :(得分:4)

如果not some_object是假的,

True将返回some_object,即如果bool(some_object)将返回False

对于任何整数zbool(z)始终为True,除非z==0。因此,not int(x)只是一种检查x在将其转换为整数(使用int)后是否为零的方法。

演示:

>>> x = '-7' # this is not 0 after conversion to an integer
>>> bool(int(x))
True
>>> x = '0'
>>> bool(x) # a non-empty string is truthy
True
>>> bool(int(x))
False
>>> not int(x) # you can omit the call to bool in a boolean context
True

在布尔上下文中,我们可以省略对bool的调用。使用对象的隐式布尔值可以派上用场,特别是当你想检查一些对象是否为空时(例如空字符串,集合,列表,字典......)。

>>> not {}
True
>>> not []
True
>>> not set()
True
>>> not ''
True
>>> not tuple()
True
>>> not 0.0
True
>>> not 0j
True    
>>> not [1,2,3]
False

这里涉及的方法是Python2的__nonzero__和Python3的__bool__。从理论上讲,我们可以覆盖这些。请考虑以下Python2示例:

>>> class LyingList(list):
...     def __nonzero__(self): # for Py3, override __bool__
...         return True
... 
>>> liar = LyingList([])
>>> liar
[]
>>> not liar
False

哦,哦!