0
votes

Comment les valeurs sont-elles suivies avec la syntaxe 'for el in séquence'?

J'essaie de saisir ce que le mécanisme de maintenance des valeurs est renvoyé à la fonction Somme () ci-dessous: xxx

de ce que je vois, x ** y est calculé Pour chaque caractère de la chaîne de valeur - toutefois, car la construction «pour Char in Str» est dans la fonction Somme, le résultat de chacun de ces calculs est renvoyé à la somme (). La valeur de retour de la somme () comptes pour toutes les itérations, et j'aimerais savoir comment la somme () a été capable de suivre toutes les valeurs de retour de l'expression X ** Y.

J'utilise Python 3.7.4. En venant de Java, je comprends que la fonction ne respecte pas les meilleures pratiques, je voudrais juste savoir comment cela fonctionne en termes de python.


0 commentaires

3 Réponses :


1
votes

Ce que vous utilisez est un générateur:

Les générateurs sont un outil simple et puissant pour créer des itérateurs. Ils sont écrits comme des fonctions régulières mais utilisent la déclaration de rendement chaque fois qu'ils veulent renvoyer des données. Chaque fois le prochain () est appelé, le Le générateur reprend là où il est rallongé (il se souvient de toutes les valeurs de données et quelle affirmation a été exécutée)

Vérifiez ici pour une meilleure compréhension: https://wiki.python.org/moin/generators


0 commentaires


0
votes

Okey permet de la casser en parties:

  1. str (valeur) est casting valeur dans une chaîne ( str )
  2. len (str (valeur)) obtient la longueur de cette chaîne
  3. ... pour x dans str (valeur) est une expression génératrice. Il va attribuer à x chaque élément dans str (valeur) (ceci est, chaque caractère) et évalue la première clause. Pour simplifier cela, vous pouvez penser qu'il renvoie un tableau. En fait, cela ne le fait pas, mais conceptuellement, yopu peut y penser comme ça. Il crée en fait une construction spéciale qui peut être itératée sur et qui évalue chaque élément lorsqu'il est demandé, de sorte que c'est de la même mémoire efficace qui crée un tableau.
  4. int (x) est casting x (qui correspond à chacun des caractères de la chaîne) dans un entier ( int ). < / li>
  5. int (x) ** len (STR (valeur)) est calculé x à la puissance de la longueur de la chaîne complète.
  6. somme est une fucntion qui accepte toute construction iérêtrice (dans ce cas un générateur, mais il pourrait s'agir d'une gamme de quelque sorte) et ajoute ses éléments.

    donc en conclusion, si vous faites narcissiisticnumber (123) il retournera 1 ^ 3 + 2 ^ 3 + 3 ^ 3 = 1 + 8 + 27 = 36 .


0 commentaires