Si lo usa any(lst), verá que lstes el iterable, que es una lista de algunos elementos. Si contuviera [0, False, '', 0.0, [], {}, None](que todos tienen valores booleanos de False), entonces any(lst)sería False. Si lsttambién contiene alguno de los siguientes [-1, True, "X", 0.00001](todos los cuales se evalúan True), entonces any(lst)sería True.
En el código que publicaste, x > 0 for x in lsteste es un tipo diferente de iterable, llamado expresión generadora . Antes de las expresiones generadoras se añadieron a Python, se habría creado una lista por comprensión , que es muy similar, pero con rodea []'s: [x > 0 for x in lst]. Del lstcontiene [-1, -2, 10, -4, 20], se llega a esta lista comprendido : [False, False, True, False, True]. Este valor interno luego se pasaría a la anyfunción, que regresaría True, ya que hay al menos un Truevalor.
Pero con las expresiones generadoras , Python ya no tiene que crear esa lista interna de True(s)y False(s), los valores se generarán a medida que la anyfunción itera a través de los valores generados uno a la vez por la expresión generadora. Y , dado que hay anycortocircuitos, dejará de iterar tan pronto como vea el primer Truevalor. Esto sería especialmente útil si creó lstusando algo como lst = range(-1,int(1e9))(o xrangesi está usando Python2.x ). A pesar de que esta expresión generará más de mil millones entradas, anysólo tiene que ir hasta la tercera entrada cuando se llega a 1, que evalúa Truepara x>0, y así anypuede volver True.
Si hubiera creado una lista de comprensión , Python primero habría tenido que crear la lista de mil millones de elementos en la memoria y luego pasarla a any. Pero al usar una expresión generadora , puede hacer que las funciones integradas de Python como anyy allsalgan temprano, tan pronto como se vea un valor Trueo False.
any(x > 0 for x in list)es solo un azúcar sintáctico paraany((x > 0 for x in list)).