2011-09-18 20 views
8

Sigo siendo un python newb, pero estoy trabajando a través del Pyneurgen neural network tutorial, y no entiendo completamente cómo funciona el bucle for utilizado para crear los datos de entrada en esta instancia:No entiendo este pitón Para el bucle

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

¿Qué itera el ciclo exactamente? No he encontrado el uso de la coma y una función en el ciclo antes.

Gracias de antemano por cualquier ayuda :)

Respuesta

11

La función population_gen devuelve una lista de tuplas, que se desempaquetan automáticamente en nombres de variables utilizando esta sintaxis.

Así que, básicamente, que está recibiendo algo así como lo siguiente como valor de retorno de la función:

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

Teniendo en cuenta este ejemplo, en el la para la primera iteración del bucle, la "posición" de las variables y "objetivo" tendrá los valores:

position = "pos1" 
target = "target1" 

En segundo iteración:

position = "pos2" 
target = "target2" 
3

Tupla desembalaje.

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

Y la función es solo una función.

3

La función devuelve una secuencia o sirve como algo llamado "generador": escupe elementos sucesivos en una secuencia para que la persona que llama pueda recorrerlos. This question con respecto a la palabra clave yield, tiene una discusión detallada sobre cómo funcionan.

En cuanto a la coma, ya que la función (aparentemente) devuelve dos tuplas, la lista de nombres separados por comas es una manera conveniente de nombrar elementos individuales de la tupla sin tener que descomprimirlos usted mismo.

2

Se llama tuple unpacking. La función population_gen (generador) produce tuplas que contienen exactamente dos elementos. En Python, puede asignar varias variables a tuplas como esto

a, b = (1, 2) 

Así que en este bucle for, se pone directamente los dos valores de tupla desde el elemento iteración actual en sus dos variables position y target.