Как использовать логическое значение в Python?

109

Действительно ли Python содержит логическое значение? Я знаю, что вы можете:

checker = 1
if checker:
    #dostuff

Но я довольно педантичен и люблю видеть логические значения в Java. Например:

Boolean checker;
if (someDecision)
{
    checker = true;
}
if(checker)
{
    //some stuff
}

Есть ли в Python такое понятие, как логическое значение? Я не могу найти ничего подобного в документации.

Федерер
источник
1
Помните ... вам не нужно объявлять типы при создании переменной. Достаточно просто checker = False.
Доминик Боу-Самра
10
@Dominic Bou-Samra: «вам не нужно объявлять типы»? Это не совсем так. Я думаю, вы должны сказать: «Вы не можете объявить тип для переменной».
S.Lott
2
@ S.Lott «вы не можете объявить тип для переменной» ... все еще неверно, потому что вы можете привести тип some_var = int("1234")... эта строка явно устанавливает some_var=>int
Каньон Колоб

Ответы:

142
checker = None 

if some_decision:
    checker = True

if checker:
    # some stuff

[Редактировать]

Для получения дополнительной информации: http://docs.python.org/library/functions.html#bool

Ваш код тоже работает, поскольку при необходимости 1преобразуется в True. На самом деле Python долгое время не имел логического типа (как в старом C), и некоторые программисты до сих пор используют целые числа вместо логических.

Бастьен Леонар
источник
17
Обычно проще использовать checker = (some_decision) (например, checker = (a <b)) вместо if.
MAK
11
этот фрагмент немного вводит в заблуждение ... вам все равно нужно определить "checker" перед его тестированием. Хотя OP определяет это ранее, в вашем примере checker = None абсолютно необходим, иначе вы получите UnboundLocalError
dprogramz
Логические значения Python - это целые числа. Trueи Falseявляются ссылками на расширенные intобъекты с переопределением __str__и __repr__.
Безумный физик
Логические значения Python не являются целыми числами; 1 is not True, но 1 == True.
BallpointBen
@BallpointBen: это целые числа в обычном смысле, являющиеся экземплярами intтипа, как показано isinstance(True, int).
Bastien Léonard
93

Встроенные логические функции начинаются с заглавной буквы: Trueи False.

Также обратите внимание на то, что вы можете checker = bool(some_decision)использовать сокращенное обозначение - boolвернет только Trueили False.

Это хорошо , чтобы знать , для справки в будущем , что классы , определяющих __nonzero__или__len__ будут , Trueили в Falseзависимости от результата этих функций, но практически логический результат каждого другого объекта будет True(за исключением Noneобъектов, пустые последовательности и числовых нули).

Марк Рушаков
источник
1
Большое спасибо за понимание. Поскольку народное голосование перешло к другому ответу, я наградил Бастьена «принятым ответом». Однако ваш был очень полезен! :)
Федерер
23
бравада: какой смысл не соглашаться с наиболее полезным ответом? Совершенно неважно, если за другой ответ проголосуют больше.
tzot
2
И народное голосование тоже с этим ответом. Попробуйте изменить свой голос.
Аластор Муди,
12

True ... и False очевидно.

В противном случае Noneоценивается как False, как и целое число, 0а также число с плавающей запятой 0.0(хотя я бы не стал использовать такие числа с плавающей запятой). Кроме того, пустые списки [], пустые кортежи ()и пустые строки ''или ""оцениваются как False.

Попробуйте сами с функцией bool():

bool([])
bool(['a value'])
bool('')
bool('A string')
bool(True)  # ;-)
bool(False)
bool(0)
bool(None)
bool(0.0)
bool(1)

и т.д..

Терье Даль
источник
5

Логические типы определены в документации:
http://docs.python.org/library/stdtypes.html#boolean-values

Цитата из документа:

Логические значения - это два постоянных объекта False и True. Они используются для представления значений истинности (хотя другие значения также могут считаться ложными или истинными). В числовом контексте (например, при использовании в качестве аргумента арифметического оператора) они ведут себя как целые числа 0 и 1 соответственно. Встроенная функция bool () может использоваться для приведения любого значения к логическому, если это значение может быть интерпретировано как значение истинности (см. Раздел «Проверка истинности значения» выше).

Они записываются как False и True соответственно.

Итак, в java-коде удалите фигурные скобки, измените trueна, Trueи все будет в порядке :)

Анураг Униял
источник
4

Да, есть boolтип данных (который наследуется от intдвух значений и имеет только два значения: TrueиFalse ).

Но также в Python есть boolean-ableконцепция для каждого объекта, которая используется при bool([x])вызове функции .

Подробнее: объект. ненулевое и логическое-значение-объектов-в-питоне .

фургон
источник
x = bool (0) # false && x = bool (1) # true
Джулиан
0

В отличие от Java, в которой вы объявляете boolean flag = True, в Python вы можете просто объявитьmyFlag = True

Python интерпретирует это как логическую переменную

кодировщик
источник