Como faço para usar um booleano em Python?

109

Python realmente contém um valor booleano? Eu sei que você pode fazer:

checker = 1
if checker:
    #dostuff

Mas sou bastante pedante e gosto de ver booleanos em Java. Por exemplo:

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

Existe um booleano em Python? Não consigo encontrar nada parecido na documentação.

Federer
fonte
1
Lembre-se ... você não precisa declarar tipos ao criar uma variável. Apenas 'checker = False' será suficiente.
Dominic Bou-Samra
10
@Dominic Bou-Samra: "você não precisa declarar tipos"? Isso não é bem verdade. Eu acho que você deveria dizer "você não pode declarar um tipo para uma variável."
S.Lott
2
@ S.Lott "você não pode declarar um tipo para uma variável" ... ainda não é verdade porque você pode typecast some_var = int("1234")... essa linha define explicitamente some_var=>int
Kolob Canyon

Respostas:

142
checker = None 

if some_decision:
    checker = True

if checker:
    # some stuff

[Editar]

Para obter mais informações: http://docs.python.org/library/functions.html#bool

Seu código também funciona, pois 1é convertido para Truequando necessário. Na verdade, Python não teve um tipo booleano por muito tempo (como no antigo C), e alguns programadores ainda usam inteiros em vez de booleanos.

Bastien Léonard
fonte
17
Geralmente é mais simples usar verificador = (alguma_decisão) (por exemplo, verificador = (a <b)), em vez de um 'se'.
MAK
11
este trecho é um pouco enganador ... você ainda precisa definir "verificador" antes de testá-lo. Embora OP o defina anteriormente, em seu exemplo, checker = None é absolutamente necessário ou você obterá um UnboundLocalError
dprogramz
Os booleanos do Python são inteiros. Truee Falsesão referências a intobjetos estendidos com __str__e sobrescritos __repr__.
Mad Physicist
Os booleanos do Python não são inteiros; 1 is not True, mas 1 == True.
BallpointBen
@BallpointBen: são inteiros no sentido comum de serem instâncias do inttipo, conforme mostrado por isinstance(True, int).
Bastien Léonard
93

Os booleanos embutidos são capitalizados: Truee False.

Observe também que você pode fazer checker = bool(some_decision)uma pequena abreviação - boolsó retornará Trueou False.

É bom saber para referência futura que as classes__nonzero____len__ que definem ou serão Trueou Falsedependendo do resultado dessas funções, mas virtualmente todos os outros resultados booleanos do objeto serão True(exceto para o Noneobjeto, sequências vazias e zeros numéricos).

Mark Rushakoff
fonte
1
Muito obrigado pelo insight. Como o voto popular mudou para a outra resposta, conceda a Bastien a 'Resposta Aceita'. No entanto, o seu foi muito útil! :)
Federer
23
bravado: de que adianta não aceitar a resposta que você considera mais útil? É totalmente irrelevante se outra resposta tiver mais votos positivos.
tzot
2
E o voto popular também está com essa resposta. Considere mudar seu voto.
Alastor Moody
12

True... e Falseobviamente.

Caso contrário, é Noneavaliado como False, assim como o inteiro 0e também o float 0.0(embora eu não usasse floats assim). Além disso, listas vazias [], tuplets ()vazios e strings vazias ''ou ""avaliadas como False.

Experimente você mesmo com a função bool():

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

etc ..

Terje Dahl
fonte
5

Os tipos booleanos são definidos na documentação:
http://docs.python.org/library/stdtypes.html#boolean-values

Citado do doc:

Os valores booleanos são os dois objetos constantes, False e True. Eles são usados ​​para representar valores verdadeiros (embora outros valores também possam ser considerados falsos ou verdadeiros). Em contextos numéricos (por exemplo, quando usados ​​como argumento para um operador aritmético), eles se comportam como os inteiros 0 e 1, respectivamente. A função embutida bool () pode ser usada para converter qualquer valor para um booleano, se o valor puder ser interpretado como um valor verdade (consulte a seção Teste de valor verdade acima).

Eles são escritos como False e True, respectivamente.

Portanto, no código java, remova os colchetes, mude truepara Truee você ficará bem :)

Anurag Uniyal
fonte
4

Sim, existe um booltipo de dados (que herda inte possui apenas dois valores: Truee False).

Mas também Python tem o boolean-ableconceito para cada objeto, que é usado quando a função bool([x])é chamada.

Veja mais: objeto. diferente de zero e valor booleano dos objetos em python .

furgão
fonte
x = bool (0) # false && x = bool (1) # true
Juliano
0

Ao contrário de Java, onde você declararia boolean flag = True, em Python você pode simplesmente declararmyFlag = True

Python interpretaria isso como uma variável booleana

codificador
fonte