Eu só vim saber que existem Truthy e Falsas valores em python que são diferentes do normal, True
e False
?
Alguém pode explicar em profundidade o que truthy e Falsas valores são?
Onde devo usá-los?
Qual é a diferença entre verdade e True
valores e falsidade e False
valores?
bool(value)
resultarTrue
, entãovalue
é verdade .__nonzero__
e__bool__
Respostas:
Conforme os comentários descritos, refere-se apenas aos valores avaliados como Verdadeiro ou Falso.
Por exemplo, para ver se uma lista não está vazia, em vez de verificar assim:
Você pode simplesmente fazer isso:
Isso ocorre porque alguns valores, como listas vazias, são considerados falsos quando avaliados para um valor booleano. Listas não vazias são verdadeiras.
Da mesma forma, para o inteiro 0, a string vazia "" e assim por diante, para False, e inteiros diferentes de zero, strings não vazias e assim por diante, para True.
A ideia de termos como "verdadeiro" e "falso" simplesmente se refere aos valores que são considerados verdadeiros em casos como os descritos acima, e aqueles que são considerados falsos.
Por exemplo, uma lista vazia (
[]
) é considerada "falsa" e uma lista não vazia (por exemplo,[1]
) é considerada "verdadeira".Veja também esta seção da documentação .
fonte
if my_list
significa "se minha_lista não estiver vazia", eif not my_list
significa "se minha_lista estiver vazia".if a:
que significa este tipo de condições? significa se a é verdadeiro ou significa se a é falso? ou significa se a é verdadeiro ou se a é falso?if []:
que nunca seria executado.Todos os valores são considerados "verdadeiros", exceto os seguintes, que são "falsos":
None
False
0
0.0
0j
Decimal(0)
Fraction(0, 1)
[]
- um vaziolist
{}
- um vaziodict
()
- um vaziotuple
''
- um vaziostr
b''
- um vaziobytes
set()
- um vazioset
range
, comorange(0)
obj.__bool__()
retornaFalse
obj.__len__()
retorna0
Um valor "verdadeiro" irá satisfazer a verificação realizada por instruções
if
ouwhile
. Usamos "verdadeiro" e "falso" para diferenciar dosbool
valoresTrue
eFalse
.Teste de valor da verdade
fonte
__bool__
primeiro, então__len__
. Se nenhum dos dois for definido, todas as instâncias serão consideradas "verdadeiras". Isso é discutido nos documentos doobject.__bool__
métodotimedelta(0)
é como zero. Isso veio à tona quando foi descoberto que os valores de hora que representam meia-noite eram falsos, o que acabou sendo corrigido: lwn.net/Articles/590299Os valores verdadeiros referem-se aos objetos usados em um contexto booleano e não tanto ao valor booleano que retorna verdadeiro ou falso. Veja-os como exemplo:
fonte
Python determina a veracidade aplicando
bool()
ao tipo, que retornaTrue
ouFalse
que é usado em uma expressão comoif
ouwhile
.Aqui está um exemplo para uma classe personalizada
Vector2d
e sua instância retornaFalse
quando a magnitude (comprimento de um vetor) é 0, caso contrárioTrue
.Nota: Se não tivéssemos definido,
__bool__
ele sempre retornaria True, pois as instâncias de uma classe definida pelo usuário são consideradas verdadeiras por padrão.Exemplo do livro: "Fluente em Python, programação clara, concisa e eficaz"
fonte
Onde você deve usar os valores Truthy ou Falsy? Estes são açúcares sintáticos , então você sempre pode evitá-los, mas usá-los pode tornar seu código mais legível e mais eficiente. Além disso, você os encontrará em muitos exemplos de código, seja em python ou não, porque é considerada uma boa prática.
Conforme mencionado nas outras respostas, você pode usá-los em testes if e loops while. Aqui estão dois outros exemplos em python 3 com valores padrão combinados com
or
,s
sendo uma variável de string. Você também se estenderá a situações semelhantes.Sem verdade
com verdade é mais conciso:
No Python 3.8, podemos tirar proveito da expressão de atribuição
:=
sem verdade
com verdade é mais curto também
ou ainda mais curto,
Sem a expressão de atribuição, pode-se fazer
mas não mais curto. Algumas pessoas acham a
s =...
linha insatisfatória porque corresponde ano entanto, você pode aderir a esse estilo de codificação se se sentir confortável com ele.
fonte
Se você executasse este loop, veria que while 0: = while false:
0 é considerado falso
fonte
Falsy significa algo vazio como lista vazia, tupla, como qualquer tipo de dados com valores vazios ou Nenhum. Verdadeiro significa: Exceto são verdadeiros
fonte