Si vous utilisez, any(lst)
vous voyez que lst
c'est l'itérable, qui est une liste de certains éléments. S'il contenait [0, False, '', 0.0, [], {}, None]
(qui ont tous des valeurs booléennes de False
), alors le any(lst)
serait False
. S'il lst
contenait également l'un des éléments suivants [-1, True, "X", 0.00001]
(dont tous évalués à True
), alors le any(lst)
serait True
.
Dans le code que vous avez publié, x > 0 for x in lst
il s'agit d'un autre type d'itérable, appelé expression de générateur . Avant expressions du générateur ont été ajoutées à Python, vous avez créé une compréhension de la liste , ce qui est très similaire, mais avec autour []
de: [x > 0 for x in lst]
. De la lst
contenant [-1, -2, 10, -4, 20]
, vous obtiendrez cette liste compris : [False, False, True, False, True]
. Cette valeur interne serait ensuite transmise à la any
fonction, qui retournerait True
, car il y a au moins une True
valeur.
Mais avec les expressions génératrices , Python n'a plus à créer cette liste interne de True(s)
et False(s)
, les valeurs seront générées au fur et à mesure que la any
fonction parcourt les valeurs générées une par une par l'expression du générateur. Et , depuis les any
courts-circuits, il arrêtera d'itérer dès qu'il verra la première True
valeur. Ce serait particulièrement pratique si vous avez créé en lst
utilisant quelque chose comme lst = range(-1,int(1e9))
(ou xrange
si vous utilisez Python2.x ). Même si cette expression générera plus d'un milliard d'entrées, elle any
n'a qu'à aller jusqu'à la troisième entrée lorsqu'elle arrive 1
, qui évalue True
pour x>0
, et any
peut donc revenir True
.
Si vous aviez créé une compréhension de liste , Python aurait d'abord dû créer la liste d'un milliard d'éléments en mémoire, puis la transmettre à any
. Mais en utilisant une expression de générateur , vous pouvez avoir des fonctions intégrées de Python comme any
et all
se déclencher tôt, dès qu'une valeur True
ou False
est vue.
any(x > 0 for x in list)
n'est qu'un sucre syntaxique pourany((x > 0 for x in list))
.None
à la liste des éléments qui ont des valeurs booléennes deFalse
any
.def b(x): return x; print b(x > 1 for x in xs) # prints <generator object ..
Il suffit de réduire plusieurs lignes de code en une seule. Vous n'avez pas besoin d'écrire du code long comme:
la source
(x > 0 for x in list)
dans cette fonction, l'appel crée une expression de générateur, par exemple.Qui
any
utilise et court-circuite à la rencontre du premier objet qui évalueTrue
la source
C'est parce que l'itérable est
Notez que
x > 0
retourne soitTrue
ouFalse
et donc vous avez un itérable de booléens.la source
Dire simplement, any () fait ce travail: selon la condition, même s'il rencontre une valeur satisfaisante dans la liste, il retourne true, sinon il retourne false.
la source