Что такое Истина и Ложь? Чем оно отличается от Истинного и Ложного?

#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 означает что-то пустое,например пустой список, кортеж, как и любой тип данных, имеющий пустые значения или их нет. Правдивость означает : Кроме того, что вы Правдивы