0
votes

Qu'est-ce que cela signifie quand vous passez une boucle dans une fonction de python?

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)


1 commentaires

Mot clé: "Expression génératrice", voir aussi "Compréhension de la liste".


4 Réponses :


1
votes

self.frrontier est un iérêteur.

Node.state == State pour le nœud in Self.Frontier Iterates thru Self.frontier et crée une nouvelle liste de valeurs vraies et fausses sur la base de si l'état correspond à la correspondance de l'état.

tout (...) est de retour vrai si l'une de cette liste contient true. < / p>

C'est à peu près équivalent à: xxx


0 commentaires

2
votes

Il y a plusieurs choses ici:

  • n'importe quelle fonction ()

    https://beginnersbook.com/2019/03/python- Fonction /

    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.

    • python ibler

      https://www.pythonikeLeyoumeanit.com/module2_essentialsofpytHon/iterables.html

      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.

      • Valeur de retour de la fonction de la fonction: tout (node.state == état pour le nœud in Self.Frontier)

        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".

        J'espère que cela aide ...


0 commentaires

1
votes

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 nœud.state == état , contient_state renvoie true .

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.

S'il passe par la boucle entière et aucun des états des nœuds n'est égal à l'état passé à contient_state , la fonction renvoie false . Vous pouvez en apprendre davantage sur les générateurs ici .


0 commentaires

1
votes

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>

Exemple 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


0 commentaires