Se você usar, any(lst)
verá que lst
é iterável, que é uma lista de alguns itens. Se contivesse [0, False, '', 0.0, [], {}, None]
(que todos têm valores booleanos de False
), então any(lst)
seria False
. Se lst
também contivesse qualquer um dos seguintes [-1, True, "X", 0.00001]
(todos avaliados como True
), entãoany(lst)
seria True
.
No código que você postou, x > 0 for x in lst
este é um tipo diferente de iterável, chamado de expressão geradora . Antes gerador de expressões foram adicionados ao Python, você teria criado uma compreensão lista , que se parece muito semelhante, mas com áreas []
de: [x > 0 for x in lst]
. Do lst
contendo [-1, -2, 10, -4, 20]
, você teria esta lista compreendido : [False, False, True, False, True]
. Este valor interno seria então passado para a any
função, que retornaria True
, uma vez que há pelo menos umTrue
valor.
Mas com expressões geradoras , o Python não precisa mais criar essa lista interna de True(s)
e False(s)
, os valores serão gerados conforme a any
função itera por meio dos valores gerados um de cada vez pela expressão geradora. E , como any
ocorre em curto-circuito, ele para de iterar assim que vê o primeiro True
valor. Isso seria especialmente útil se você criou lst
usando algo como lst = range(-1,int(1e9))
(ou xrange
se estiver usando Python2.x ). Mesmo que esta expressão gere mais de um bilhão de entradas, any
só precisa ir até a terceira entrada quando chegar a 1
, que avalia True
para x>0
, e então any
pode retornarTrue
.
Se você tivesse criado uma compreensão de lista , Python teria primeiro que criar a lista de bilhões de elementos na memória e, em seguida, passá-la para any
. Mas, usando uma expressão geradora , você pode ter as funções embutidas do Python como any
e all
aparecer mais cedo, assim que um valor True
ou False
for visto.
any(x > 0 for x in list)
é apenas um açúcar sintático paraany((x > 0 for x in list))
.None
à lista de elementos que têm valores booleanos deFalse
any
.def b(x): return x; print b(x > 1 for x in xs) # prints <generator object ..
Ele apenas reduz várias linhas de código em uma. Você não tem que escrever códigos longos como:
fonte
(x > 0 for x in list)
nessa chamada de função cria uma expressão geradora, por exemplo.Que
any
usa, e atalhos ao encontrar o primeiro objeto que avaliaTrue
fonte
É porque o iterável é
Observe que
x > 0
retornaTrue
ouFalse
e, portanto, você tem um iterável de booleanos.fonte
Simplesmente dizer, any () faz este trabalho: de acordo com a condição, mesmo se encontrar um valor de preenchimento na lista, ele retorna verdadeiro, caso contrário, ele retorna falso.
fonte