Я только что узнал, что в python есть значения Truthy и Falsy, которые отличаются от нормальных True
и False
?
Может кто-нибудь подробно объяснить, что такое истинные и ложные ценности?
Где мне их использовать?
В чем разница между правдой и True
ценностями и ложью и False
ценностями?
bool(value)
результатTrue
, тоvalue
это правда .__nonzero__
и__bool__
Ответы:
Как описано в комментариях, это просто относится к значениям, которые оцениваются как True или False.
Например, чтобы увидеть, не пуст ли список, вместо такой проверки:
Вы можете просто сделать это:
Это связано с тем, что некоторые значения, такие как пустые списки, считаются ложными при вычислении логического значения. Непустые списки верны.
Аналогично для целого числа 0, пустой строки "" и так далее для False и ненулевых целых чисел, непустых строк и так далее для True.
Идея таких терминов, как «правдивость» и «ложь», просто относится к тем значениям, которые считаются Истинными в случаях, подобных описанным выше, и к тем, которые считаются ложными.
Например, пустой список (
[]
) считается «ложным», а непустой список (например,[1]
) считается «правдивым».См. Также этот раздел документации .
источник
if my_list
означает «если my_list не пуст» иif not my_list
означает «если my_list пуст».if a:
что означает этот тип условий? означает ли это, если а истинно, или означает, если а ложно? или это означает, если а истинно или если а ложно?if []:
бы никогда не казнить.Все значения считаются «правдивыми», за исключением следующих, которые являются «ложными»:
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
.Проверка истинности
источник
__bool__
сначала ищет__len__
. Если ни один из них не определен, все экземпляры считаются "истинными". Это обсуждается в документации поobject.__bool__
методуtimedelta(0)
это как ноль. Это поднялось, когда было обнаружено, что значения времени, представляющие полночь, были ложными, что в конечном итоге было исправлено: lwn.net/Articles/590299Истинные значения относятся к объектам, используемым в логическом контексте, а не столько к логическому значению, которое возвращает истину или ложь. Возьмите их в качестве примера:
источник
Python определяет истинность, применяя
bool()
к типу, который возвращаетTrue
илиFalse
используется в выражении, таком какif
илиwhile
.Вот пример настраиваемого класса,
Vector2d
и его экземпляр возвращается,False
когда величина (длина вектора) равна 0, в противном случаеTrue
.Примечание. Если бы мы не определили,
__bool__
он всегда будет возвращать True, поскольку экземпляры определенного пользователем класса по умолчанию считаются истинными.Пример из книги: «Свободное владение Python, четкое, лаконичное и эффективное программирование»
источник
Где следует использовать значения истинности или ложности? Это синтаксический сахар , поэтому вы всегда можете избежать их, но их использование может сделать ваш код более читабельным и повысить эффективность. Более того, вы найдете их во многих примерах кода, будь то на Python или нет, потому что это считается хорошей практикой.
Как упоминалось в других ответах, вы можете использовать их в тестах if и while. Вот два примера в Python 3 с значениями по умолчанию в сочетании с
or
,s
будучи строковой переменной. Вы также будете распространяться на подобные ситуации.Без правды
с правдой это более кратко:
В python 3.8 мы можем воспользоваться выражением присваивания
:=
без правды
с правдами он короче тоже
или даже короче,
Без выражения присваивания можно сделать
но не короче. Некоторые люди находят
s =...
строку неудовлетворительной, потому что она соответствуеттем не менее, вы можете придерживаться этого стиля кодирования, если вам это удобно.
источник
Ложь означает что-то пустое, например пустой список, кортеж, а также любой тип данных, имеющий пустые значения или None. Истина означает: кроме правды
источник