Почему для x = 0 «не x» — это True, а «x» — False в Python?

Я застрял насчет True/False из x и not x,

для x = 0, где x равно int, в Python.

Почему if not x разрешает выполнение следующего оператора и почему не позволяет if x?

Пожалуйста, дайте объяснение.


person Kiyojiro    schedule 21.06.2020    source источник
comment
... of the following statement... Кажется, нам не хватает задуманного вами кода. Вы можете использовать кнопку edit, чтобы добавить его.   -  person Mark    schedule 21.06.2020


Ответы (7)


из документации по питону:

По умолчанию объект считается истинным, если его класс не определяет либо метод bool(), возвращающий False, либо метод len(), возвращающий ноль при вызове с объектом. . 1 Вот большинство встроенных объектов, которые считаются ложными:

  • константы, определенные как ложные: None и False.

  • ноль любого числового типа: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)

  • пустые последовательности и коллекции: '', (), [], {}, set(), range(0)

https://docs.python.org/3/library/stdtypes.html

то есть ноль является целым числом,

>>> type(0)
<class 'int'>

но имеет логическое значение False, как '', (), []... и т. д.

person Jailton Silva    schedule 21.06.2020

Поскольку в python 0 считается ложным, поэтому, когда вы пишете (if x), он будет выполняться только тогда, когда x !=0 (поэтому он будет оцениваться как истинный).

person Community    schedule 21.06.2020
comment
Спасибо, что научил меня. Довольно полезно!! - person Kiyojiro; 22.06.2020

Операторы if не выполняют свое содержимое, если их условие оценивается как ложное значение, например 0, пустая строка, False или пустой список/кортеж.

person xnsc    schedule 21.06.2020
comment
Большая помощь. Спасибо!! - person Kiyojiro; 22.06.2020

собираюсь предположить, что вы имеете в виду

x = True
y = 0

if x:
  print('x is true')
if not y:
  print('your not sure why this prints')

Это связано с тем, что в Python 0 оценивается как False.

person thekid77777    schedule 21.06.2020
comment
Обидно, но я не знал, что «0 оценивается как False». Спасибо!! - person Kiyojiro; 22.06.2020
comment
Нет проблем, получайте удовольствие! - person thekid77777; 22.06.2020

0 – это подкласс bool, False , а любое число, отличное от нуля, оценивается как True.

x = 0
if not x

это как сказать

x = 0
if x is False:

чему соответствует условие.

person Ann Zen    schedule 21.06.2020
comment
Спасибо за подробное объяснение! Это дает понять, что я не полностью понял основы булевых операций. - person Kiyojiro; 22.06.2020
comment
Вы знаете, что if x: означает if is True, верно? - person Ann Zen; 22.06.2020
comment
Я только что узнал это. Спасибо!! - person Kiyojiro; 22.06.2020

В конечном счете: потому что так сказано в определении языка.

Python решил сделать почти любое выражение неявно преобразуемым в логическое значение (True/False). Преобразование определяется в языке.

Для целочисленных типов преобразование состоит в том, что 0 равно False, остальные значения True.

И, конечно же, если выражение X равно False, то not X равно True по простому определению оператора not.

person user13784117    schedule 21.06.2020
comment
Спасибо за ваше любезное объяснение. Я не знал: «Для целочисленных типов преобразование равно 0, если False». Большая помощь! - person Kiyojiro; 22.06.2020

Похоже, вам нужно немного логического обзора. Все в мире python (и большей части программирования) сводится либо к True, либо к False. Возьмем, к примеру, целые числа. В python (и, вероятно, в большинстве языков) значение 0 переходит в False, а все остальное — в True. Вы можете получить значение true/false почти для всего в python, используя функцию bool. Попробуйте bool(0) или bool(2).

Теперь if принимает выражение (по сути просто логическое значение) и, если оно равно True, выполняет блок кода, а если False — пропускает его.

x = 0
if x:
    print("This will never be printed because x is", x, "and it's Boolean value is", bool(x))

Теперь not принимает логическое значение и делает его противоположным. not True это False. not False это True. Это происходит, сколько бы раз ни было not, поэтому not not True будет True.

x = 0
if not x:
    print("This will print, because x is", 0, "the Boolean value of x is", bool(x), "and the not value of boolean x is", not bool(x))
person cajomar    schedule 21.06.2020
comment
Спасибо, что напомнили мне о булевских основах. Я пробовал bool(0) и bool(2). Очень ценю ваши комментарии. - person Kiyojiro; 22.06.2020