Blog em português onde relato a minha aprendizagem de Python. Sendo um blog, ele deve ser lido de baixo para cima e é escrito orientado a uma audiência com alguns conhecimentos de programação. Não tentando ser uma fonte exaustiva de conhecimento sobre Python, pode, no entanto, servir como crash course a esta linguagem.

Tuesday, June 16, 2009

Qual é a verdade?

Vou falar de Booleanos em Python. Cada linguagem apresenta a sua interpretação do que é verdade. Python não é excepção.
Em python, tudo é verdade (True) excepto: os containers vazios (listas vazias, sets vazios,...), None (o equivalente ao null noutros mundos) e 0. Espero não estar a esquecer casos. Vou usar a função bool() para exemplificar:
>>> bool(0)
False
>>> bool(1)
True
>>> bool([])
False
(lista vazia é interpretada como falsa)
>>> bool([1])
True 
(lista não vazia é interpretada como verdade)
>>> bool([1,2])
True
>>> bool(())
False
(tuplo vazia é interpretada como falso)
>>> bool((None))
False 
(None é falso)
>>> bool((None,))
True 
(Tuplo com None já é True)
>>> bool(False)
False
>>> bool(not False)
True
>>> bool(list)
True  
(Um tipo também é verdadeiro)
>>> list

>>>


A avaliação de expressões booleanas do tipo a and b tem também as suas peculiariedades:
Primeiro ver se a é true. Se não for então o valor da expressão é a. Se for, então o valor da expressão é b.
Isto é chamado de short circuiting e existe em outras linguagens também, mas a peculiarieadade é que, juntamente com o facto de muitas coisas serem True ou False podemos ter construções muito interessantes.
Por exemplo:


if a:
    print a
else:
    print b

pode ser simplesmente escrito como 
 
print a or b
 
o que imprime a ou b consoante a seja interpretado como verdade ou b caso
contrário.
Veja-se:
>>> print [1] or [2]
[1]
>>> print [1] or []
[1]
>>> print [] or [2]
[2]
>>>