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 lsttambé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 lsteste é 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 lstcontendo [-1, -2, 10, -4, 20], você teria esta lista compreendido : [False, False, True, False, True]. Este valor interno seria então passado para a anyfunçã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 anyfunção itera por meio dos valores gerados um de cada vez pela expressão geradora. E , como anyocorre em curto-circuito, ele para de iterar assim que vê o primeiro Truevalor. Isso seria especialmente útil se você criou lstusando algo como lst = range(-1,int(1e9))(ou xrangese estiver usando Python2.x ). Mesmo que esta expressão gere mais de um bilhão de entradas, anysó precisa ir até a terceira entrada quando chegar a 1, que avalia Truepara x>0, e então anypode 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 anye allaparecer mais cedo, assim que um valor Trueou Falsefor visto.
any(x > 0 for x in list)é apenas um açúcar sintático paraany((x > 0 for x in list)).