Что такое Истина и Ложь? Чем он отличается от True и False?
Я только что узнал, что в питоне есть значения Truthy и Falsy, которые отличаются от обычных True
и False
?
Может кто-нибудь, пожалуйста, подробно объясните, какие истинные и фальшивые ценности есть?
Где я должен их использовать?
В чем разница между значениями правды и True
и значениями фальши и False
?
Ответы
Ответ 1
Как описано в комментариях, это просто относится к значениям, которые оцениваются как True или False.
Например, чтобы увидеть, не является ли список пустым, вместо проверки:
if len(my_list) != 0:
print "Not empty!"
Вы можете просто сделать это:
if my_list:
print "Not empty!"
Это связано с тем, что некоторые значения, такие как пустые списки, считаются False при оценке для логического значения. Непустые списки имеют значение True.
Аналогично для целого числа 0 пустая строка "" и т.д. Для False и ненулевых целых чисел, непустых строк и т.д. Для True.
Идея таких терминов, как "правдивость" и "ложь", просто ссылается на те значения, которые считаются истинными в случаях, подобных описанным выше, и те, которые считаются ложными.
Например, пустой список ([]
) считается "ложным", а непустой список (например, [1]
) считается "правдивым".
См. Также этот раздел документации.
Ответ 2
Все значения считаются "правдивыми", за исключением следующих, которые являются "ложными":
-
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
.
Тестирование Истинного Значения
Ответ 3
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, понятное, лаконичное и эффективное программирование"
Ответ 4
Значения Truthy относятся к объектам, используемым в логическом контексте, а не столько к логическому значению, которое возвращает true или false. Возьмем их в качестве примера:
>>> bool([])
False
>>> bool([1])
True
>>> bool('')
False
>>> bool('hello')
True