2011-09-18 61 views
8

我仍然是一個python newb,但我正在通過Pyneurgen neural network tutorial,我不完全理解用於創建輸入數據的for循環如何在此實例中工作:不明白這個python For循環

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

什麼是循環完全迭代?我之前沒有遇到在循環中使用逗號和函數的情況。

在此先感謝您的幫助:)

回答

11

函數population_gen返回一個元組列表,這些元組使用這種語法自動解壓縮到變量名中。

因此,基本上,你要像作爲返回值從函數如下:

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

鑑於這個例子中,在for循環的第一次迭代中,變量「位置」和「目標」將具有值:

position = "pos1" 
target = "target1" 

在第二次迭代:

position = "pos2" 
target = "target2" 
3

Tuple unpacking。

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

而功能只是一個功能。

3

該函數或者返回一個序列,或者作爲一個叫做「generator:」的東西,它會在一個序列中分配連續的元素,以便調用者遍歷。有關yield關鍵字的This question對這些工作如何進行了一些深入的討論。

至於逗號,由於函數(顯然)返回一個二元組,名稱的逗號分隔列表是一個方便的方法來命名元組的各個元素,而無需自己解壓縮它們。

2

它叫做tuple unpackingpopulation_gen(生成器)函數產生包含正好兩個元素的元組。在Python中,你可以分配多個變量元組這樣

a, b = (1, 2) 

所以在這個for循環,你直接把從當前迭代項目兩元組值到您的兩個變量positiontarget