J'étudie actuellement Introduction de CS50 à l'intelligence artificielle avec python . J'ai rencontré une ligne de code qui n'a pas de sens pour moi et que je n'arrive pas à trouver des ressources en ligne pour m'expliquer cela.
def contains_state(self,state): return any(node.state == state for node in self.frontier)
4 Réponses :
C'est à peu près équivalent à: p> self.frrontier code> est un iérêteur.
Node.state == State pour le nœud in Self.Frontier Code> Iterates thru
Self.frontier Code > et crée une nouvelle liste de valeurs vraies et fausses sur la base de si l'état correspond à la correspondance de l'état. P>
tout (...) code> est de retour vrai si l'une de cette liste contient true. < / p>
Il y a plusieurs choses ici: p>
https://beginnersbook.com/2019/03/python- Fonction / P>
Python Toute fonction () accepte démontable (liste, tuple, dictionnaire, etc.) comme argument et retourne vrai si l'un de l'élément en ierable est vrai, sinon cela revient faux. Si iTable est vide, alors n'importe quelle méthode () retourne faux. p> blockQuote>
python ibler fort> li> ul> https://www.pythonikeLeyoumeanit.com/module2_essentialsofpytHon/iterables.html p>
Un iérien est n'importe quel objet Python capable de renvoyer ses membres un à la fois, le permettez-la d'être itérale dans une boucle pour la boucle. P> blockQuote>
Valeur de retour de la fonction de la fonction: strong>
tout (node.state == état pour le nœud in Self.Frontier) Code> P>
retourne "true" si une "note.value" dans l'un des "nœuds" de la liste "auto.frrontier" a la même valeur que le paramètre d'entrée "State". P> Li> ul>
J'espère que cela aide ... p>
Le code à l'intérieur de tout est un objet générateur avec des valeurs booléennes (véritable ou faux). En traversant la boucle pour la boucle, si un L'avantage d'utiliser un générateur sur une liste est que vous n'avez pas à itération à chaque élément si vous trouvez un nœud dont l'état est égal à l'état que vous recherchez. Par conséquent, dans certains cas, il fonctionnera plus rapidement. P>
S'il passe par la boucle entière et aucun des états des nœuds n'est égal à l'état passé à nœud.state == état code>, contient_state renvoie
true code>. P>
contient_state code>, la fonction renvoie
false code>. Vous pouvez en apprendre davantage sur les générateurs ici . p>
Exemple P> node.state == état pour le nœud in Self.Frontier code> est un générateur avec un
__ suivant __ code> méthode. Lorsque quelque chose appelle
__ suivant __ code>, le générateur récupère une valeur à partir de
Self.frontier code>, compare son état code> variable code> à
état code> et retourne le résultat. Lorsque
Self.fronter code> relève
STOVITÉTRATIONATION code>, cette exception est transmise à l'appelant.
tout () code> est le consommateur. Il appelle
__ Suivant __ code> jusqu'à ce que quelque chose soit vrai et retourne vrai. Si
__ suivant __ code> relève
stopiteration code>, il renvoie
false code>. P>
>>> state = 'foo'
>>> frontier = ['bar', 'bar', 'foo', 'bar']
>>> gen = (value == state for value in frontier)
>>> type(gen)
<class 'generator'>
>>> gen.__next__()
False
>>> gen.__next__()
False
>>> gen.__next__()
True
>>> gen.__next__()
False
>>> gen.__next__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
>>> any(value == state for value in frontier)
True
Mot clé: "Expression génératrice", voir aussi "Compréhension de la liste".