Что такое Истина и Ложь в питоне? Чем он отличается от True и False?
Я только что узнал, что в Python есть значения Truthy и Falsy, которые отличаются от нормальных True
а также False
?
Может кто-нибудь объяснить подробно, что такое истинные и ложные ценности?
Где я должен их использовать?
В чем разница между правдой и True
ценности и ложь и False
ценности?
8 ответов
Как описано в комментариях, это просто относится к значениям, которые оцениваются как True или False.
Например, чтобы увидеть, не является ли список пустым, вместо проверки следующим образом:
if len(my_list) != 0:
print "Not empty!"
Вы можете просто сделать это:
if my_list:
print "Not empty!"
Это связано с тем, что некоторые значения, такие как пустые списки, считаются ложными при оценке для логического значения. Непустые списки верны.
Аналогично для целого числа 0, пустой строки "" и т. Д. Для False и ненулевых целых чисел, непустых строк и т. Д. Для True.
Идея таких терминов, как "правдивость" и "ложь", просто относится к тем ценностям, которые считаются истинными в случаях, подобных описанным выше, и тем, которые считаются ложными.
Например, пустой список ([]
) считается "ложным" и непустым списком (например, [1]
) считается "правдивым".
Смотрите также этот раздел документации.
Все значения считаются "правдивыми", за исключением следующих, которые являются "ложными":
None
False
0
0.0
0j
Decimal(0)
Fraction(0, 1)
[]
- пустойlist
{}
- пустойdict
()
- пустойtuple
''
- пустойstr
b''
- пустойbytes
set()
- пустойset
- пустой
range
, лайкrange(0)
- объекты для которых
obj.__bool__()
возвращаетсяFalse
obj.__len__()
возвращается0
"Истинное" значение удовлетворит проверку, выполненную if
или же while
заявления. Мы используем "правду" и "ложь", чтобы отличить от bool
ценности True
а также False
,
Python определяет правдивость, применяя bool()
к типу, который возвращает True
или же False
который используется в выражении, как if
или же while
,
Вот пример для пользовательского класса Vector2d
и это возвращение экземпляра False
когда величина (длина вектора) равна 0, в противном случае True
,
import math
class Vector2d(object):
def __init__(self, x, y):
self.x = float(x)
self.y = float(y)
def __abs__(self):
return math.hypot(self.x, self.y)
def __bool__(self):
return bool(abs(self))
a = Vector2d(0,0)
print(bool(a)) #False
b = Vector2d(10,0)
print(bool(b)) #True
Примечание: если бы мы не определили __bool__
он всегда будет возвращать True, так как экземпляры определенного пользователем класса по умолчанию считаются истинными.
Пример из книги: "Свободное владение Python, понятное, лаконичное и эффективное программирование"
Значения истины относятся к объектам, используемым в логическом контексте, а не столько к логическому значению, которое возвращает true или false. Возьмем их в качестве примера:
>>> bool([])
False
>>> bool([1])
True
>>> bool('')
False
>>> bool('hello')
True
Любой объект в Python можно протестировать на предмет истинности. Его можно использовать в условии if или while или как операнд логических операций.
Следующие значения считаются ложными:
Никто
Ложь
ноль любого числового типа, например 0, 0L, 0.0, 0j.
любая пустая последовательность, например, '', (), [].
любое пустое отображение, например {}.
экземпляры определяемых пользователем классов, если класс определяет
ненулевое()
или
__len__()
метод, когда этот метод возвращает целое число ноль или логическое значение False.2.5
Все остальные значения считаются истинными, поэтому объекты многих типов всегда истинны.
Операции и встроенные функции, которые имеют логический результат, всегда возвращают 0 или False для false и 1 или True для true, если не указано иное.
Где следует использовать значения истинности или ложности? Это синтаксический сахар, поэтому вы всегда можете избежать их, но их использование может сделать ваш код более читабельным и повысить эффективность. Более того, вы найдете их во многих примерах кода, будь то на Python или нет, потому что это считается хорошей практикой.
Как упоминалось в других ответах, вы можете использовать их в тестах if и while. Вот два других примера на Python 3 со значениями по умолчанию в сочетании сor
, s
является строковой переменной. Вы также будете распространяться на подобные ситуации.
Без правды
if len(s) > 0:
print(s)
else:
print('Default value')
с правдой это более кратко:
print(s or 'Default value')
В python 3.8 мы можем воспользоваться выражением присваивания :=
без правды
if len(s) == 0:
s = 'Default value'
do_something(s)
с правдами он короче тоже
s or (s := 'Default value')
do_something(s)
или даже короче,
do_something(s or (s := 'Default value'))
Без выражения присваивания можно сделать
s = s or 'Default value'
do_something(s)
но не короче. Некоторые люди находятs =...
линия неудовлетворительна, потому что она соответствует
if len(s)>0:
s = s # HERE is an extra useless assignment
else:
s = "Default value"
тем не менее, вы можете придерживаться этого стиля кодирования, если вам это удобно.
В случае
if (!id) {}
! expr возвращает
false
если его единственный операнд можно преобразовать в; в противном случае возвращается
true
.
Если значение можно преобразовать в истину, это так называемое истинное значение. Если значение может быть преобразовано в ложное, значение является так называемым ложным.
Примеры выражений, которые можно преобразовать в false:
null;
NaN;
0;
empty string ("" or '' or ``);
undefined.
Хотя
!
Оператор может использоваться с операндами, которые не являются логическими значениями, он все равно может считаться логическим оператором, поскольку его возвращаемое значение всегда может быть преобразовано в логический примитив. Чтобы явно преобразовать возвращаемое значение (или любое выражение в целом) в соответствующее логическое значение, используйте оператор двойного НЕ или логический конструктор.
Пример:
n1 = !null // !t returns true
n2 = !NaN // !f returns true
n3 = !'' // !f returns true
n4 = !'Cat' // !t returns false
В то время как в случае
if (id != null) {}
он будет только проверять, не равно ли значение в id нулевому
ссылка https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_NOT
Ложь означает что-то пустое, например, пустой список, кортеж, как любой тип данных, имеющий пустые значения или None. Истина означает: кроме правды