2011-09-18 6 views
8

Je suis toujours un python newb, mais je travaille sur le Pyneurgen neural network tutorial, et je ne comprends pas comment fonctionne la boucle for utilisée pour créer les données d'entrée dans cette instance:Je ne comprends pas ce python For loop

for position, target in population_gen(population): 
    pos = float(position) 
    all_inputs.append([random.random(), pos * factor]) 
    all_targets.append([target])` 

Quelle est la boucle parcourant exactement? Je n'ai pas rencontré l'utilisation de la virgule et une fonction dans la boucle avant.

Merci à l'avance pour toute aide :)

Répondre

11

La fonction population_gen retourne une liste de tuples, qui sont décompressés automatiquement en noms de variables en utilisant cette syntaxe.

Donc, fondamentalement, vous obtenez quelque chose comme ce qui suit comme valeur de retour de la fonction:

[("pos1", "target1"), ("pos2", "target2"), ] 

Compte tenu de cet exemple, en la pour la première itération de la boucle, les variables « position » et « cible » aura les valeurs suivantes:

position = "pos1" 
target = "target1" 

En deuxième itération:

position = "pos2" 
target = "target2" 
3

Tuple déballage.

for a, b in [(1, 2), (3, 4)]: 
    print a 
    print b 
    print 'next!' 

Et la fonction est juste une fonction.

3

La fonction renvoie une séquence ou sert de "générateur": elle crache des éléments successifs dans une séquence que l'appelant doit traverser. This question concernant le mot-clé de rendement a une discussion approfondie de la façon dont ceux-ci fonctionnent. Comme pour la virgule, puisque la fonction renvoie (apparemment) un double-tuple, la liste de noms séparés par des virgules est un moyen pratique de nommer des éléments individuels du tuple sans avoir à les déballer vous-même.

2

Il s'appelle tuple unpacking. La fonction population_gen (générateur) fournit des tuples contenant exactement deux éléments. En python, vous pouvez assigner plusieurs variables à tuples comme celui-ci

a, b = (1, 2) 

donc dans cette boucle for, vous mettez directement les deux valeurs de l'élément tuple de l'itération courante dans vos deux variables position et target.