not some_object
будет возвращать True
, если some_object
является falsy, то есть, если 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
Методы, участвующие здесь __nonzero__
для python2 и __bool__
для Python3. Теоретически мы могли бы переопределить их. Рассмотрим следующий пример Python2:
>>> class LyingList(list):
... def __nonzero__(self): # for Py3, override __bool__
... return True
...
>>> liar = LyingList([])
>>> liar
[]
>>> not liar
False
uh oh!
_ "Я не могу понять значение не в этом" _. Извините, в чем? Если вас смущает часть кода, отправьте этот фрагмент кода. (предпочтительно, как [mcve]) – Kevin
, если 'x'' '' '' '' '0'', или' x' - это float и '1> x> = 0', тогда' not int (x) 'будет 'true'. В противном случае это будет «ложь». –
@ Кевин должен быть понятен сейчас. – timgeb