#python #list #if-statement
Вопрос:
Я только что узнал, что в python есть истинные и ложные значения, которые отличаются от обычных True
и False
.
Может ли кто-нибудь, пожалуйста, подробно объяснить, что такое истинные и ложные ценности? Где я должен их использовать? В чем разница между правдой и True
ценностями и ложью и False
ценностями?
Комментарии:
1. Если
bool(value)
это приводит кTrue
, тоvalue
это правда .2. Ты сам придумал эти слова, не так ли? В любом случае, смотри
__nonzero__
и__bool__
3. Истинные/ложные значения-это просто удобства для ситуаций, когда вам нужен какой-то двоичный тест. Это позволяет создавать более простой код, а более простой код часто легче читать с меньшей вероятностью ошибок.
4. @zvone Истинность и ложь обычно используется в коде гольфа, если языки программирования не имеют логических значений.
5. @zvone: «Правдивость» и «ложь» широко используются при сравнении языков программирования, например, PHP против PERL против Python против JS. (Абсолютно не просто кодовый гольф).
Ответ №1:
Все значения считаются «истинными», за исключением следующих, которые являются «ложными».:
None
False
0
0.0
0j
decimal.Decimal(0)
fraction.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
.
Комментарии:
1. Отличный список, спасибо. Чисто академический вопрос, но знаете ли вы, что такое порядок исполнения? Я думал, что вы могли бы создать объект, в котором bool возвращает True, а len возвращает 0 (или наоборот).
2. @HaydenCrocker
__bool__
, значит, сначала он ищет__len__
. Если ни то, ни другое не определено, все экземпляры считаются «истинными». Это обсуждается в документах поobject.__bool__
методу3. В версиях Python до версии 3.5 объекты времени , представляющие полуночный UTC, считались ложными. В этой статье дается обзор сообщения об ошибке, связанной с этой проблемой, и возможного решения.
4. Интересно, что для пакета datetime значение datetime.min соответствует действительности, в то время как значение timedelta(0) является ложным.
5. @DavidKinghorn, хотя в этом есть смысл, верно? Минимальное значение даты-времени-это просто дата, как и любая другая, она никоим образом не похожа на ноль. Напротив,
timedelta(0)
это похоже на ноль. Это возникло, когда было обнаружено, что значения времени, представляющие полночь, были ложными, что в конечном итоге было исправлено: lwn.net/Articles/590299
Ответ №2:
Как описано в комментариях, это просто относится к значениям, которые оцениваются как Истинные или Ложные.
Например, чтобы проверить, не пуст ли список, вместо такой проверки:
if len(my_list) != 0:
print("Not empty!")
Вы можете просто сделать это:
if my_list:
print("Not empty!")
Это связано с тем, что некоторые значения, такие как пустые списки, считаются ложными при вычислении логического значения. Непустые списки верны.
Аналогично для целого числа 0, пустой строки «» и так далее, для ложных и ненулевых целых чисел, непустых строк и так далее, для истинных.
Идея таких терминов, как «истинный» и «ложный», просто относится к тем значениям, которые считаются Истинными в случаях, подобных описанным выше, и к тем, которые считаются Ложными.
Например, пустой список ( []
) считается «ложным», а непустой список (например, [1]
) считается «правдивым».
См.также этот раздел документации.
Комментарии:
1. Я предлагаю попробовать эти вещи в оболочке Python и убедиться в этом самостоятельно. 😉
if my_list
означает «если мой список не пуст» иif not my_list
означает «если мой список пуст».2. хорошо , у меня последнее небольшое замешательство, я видел много мест, подобных
if a:
тому, что означает этот тип условий ? означает ли это, что а истинно или означает, что а ложно ? или это означает, является ли а правдивым или ложным ?3. Это означает «если а истинно». Как я описал в своем ответе, и как другие описывали в комментариях и других ответах, разные вещи считаются Истинными или Ложными, но на самом деле это не так. Пустой список, например, считается ложным. Вот почему
if []:
меня никогда не казнят.4. означает, если a: означает, что a истинно (когда a целое число или строка), и если a: означает ложь, если a-пустой список или пустой дикт или ложные значения !
5. Да, при условии, что я правильно вас понимаю. ^_^
Ответ №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:
Истинностные значения относятся к объектам, используемым в логическом контексте, а не к логическому значению, возвращающему значение true или false.Возьмите это в качестве примера:
>>> bool([])
False
>>> bool([1])
True
>>> bool('')
False
>>> bool('hello')
True
Ответ №5:
Где вы должны использовать истинные или Ложные значения ? Это синтаксический сахар, поэтому вы всегда можете их избежать, но их использование может сделать ваш код более читабельным и повысить эффективность. Более того, вы найдете их во многих примерах кода, будь то на 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"
тем не менее, вы можете придерживаться этого стиля кодирования, если вам это удобно.
Ответ №6:
Любой объект в Python может быть проверен на его истинностное значение. Он может использоваться в условии if или while или в качестве операнда логических операций.
Следующие значения считаются ложными:
- Нет
- Ложный
- ноль любого числового типа, например, 0, 0L, 0.0, 0j.
- любая пустая последовательность, например, «, (), [].
- любое пустое сопоставление, например, {}.
- экземпляры пользовательских классов, если класс определяет
ненулевое значение()
или
__len__()
метод, когда этот метод возвращает целое число ноль или значение bool False.2.5
Все остальные значения считаются истинными, поэтому объекты многих типов всегда истинны.
Операции и встроенные функции, которые имеют логический результат, всегда возвращают 0 или False для false и 1 или True для true, если не указано иное.
Ответ №7:
В случае if (!id) {}
!expr возвращает false
, если его единственный операнд может быть преобразован в true
; в противном случае возвращает true
.
Если значение может быть преобразовано в true, это значение называется истинным. Если значение может быть преобразовано в false, это значение называется ложным.
Примерами выражений, которые могут быть преобразованы в false, являются:
null;
NaN;
0;
empty string ("" or '' or ``);
undefined.
Несмотря !
на то, что оператор может использоваться с операндами, которые не являются логическими значениями, его все равно можно считать логическим оператором, поскольку его возвращаемое значение всегда может быть преобразовано в логический примитив. Чтобы явно преобразовать его возвращаемое значение (или любое выражение в целом) в соответствующее логическое значение, используйте оператор double NOT или логический конструктор.
Пример:
n1 = !null // !t returns true
n2 = !NaN // !f returns true
n3 = !'' // !f returns true
n4 = !'Cat' // !t returns false
В то время как в случае if (id != null) {}
этого будет проверяться только, если значение в идентификаторе не равно нулю
ссылка https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_NOT
Ответ №8:
Falsy означает что-то пустое,например пустой список, кортеж, как и любой тип данных, имеющий пустые значения или их нет. Правдивость означает : Кроме того, что вы Правдивы