Як я можу використовувати булевий формат у Python?


109

Чи дійсно Python містить булеве значення? Я знаю, що ви можете:

checker = 1
if checker:
    #dostuff

Але я досить педантичний і насолоджуюся бажанням булів на Java. Наприклад:

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

Чи є в Python таке поняття, як булевий? Я не можу знайти щось подібне в документації.


1
Пам'ятайте ... вам не потрібно оголошувати типи під час створення змінної. Досить буде лише "шашки = помилкового".
Домінік Бу-Самра

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".
МАК

11
цей фрагмент трохи вводить в оману ... перед тим, як протестувати його, потрібно визначити "шашку". Хоча OP визначає це раніше, у вашому прикладі checker = None абсолютно необхідний, або ви отримаєте UnboundLocalError
dprogramz

Булеви Python - цілі числа. Trueі Falseпосилаються на розширені intоб'єкти з переосмисленими __str__і __repr__.
Божевільний фізик

Булеви Python не є цілими числами; 1 is not True, але 1 == True.
BallpointBen

@BallpointBen: вони є цілими числами в загальному розумінні бути екземплярами intтипу, як показано на isinstance(True, int).
Бастієн Леонард

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а також float 0.0(хоча я б не використовував float так). Крім того, порожні списки [], порожні кортежі ()та порожні рядки ''або ""оцінюються як Неправильно.

Спробуйте самостійно за допомогою функції 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

Цитується з doc:

Булеві значення є двома постійними об'єктами 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 інтерпретуватиме це як булева змінна

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.