我无法在诸如
之类的陈述中理解not
的含义
not int(x)
如果True
等于x
,则评估为0
。
但如果x
是任何其他数字,则评估为False
。
我想解释一下这种行为,谢谢。
答案 0 :(得分:4)
not some_object
是假的, True
将返回some_object
,即如果bool(some_object)
将返回False
。
对于任何整数z
,bool(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
哦,哦!