2017-06-20 63 views
-3

我很奇怪,爲什麼逗號符號 「」 返回true:爲什麼Python中的逗號符號返回true?

mutant = toolbox.clone(ind1) 
ind2, = tools.mutGaussian(mutant, mu=0.0, sigma=0.2, indpb=0.2) 
print (ind2 is mutant) 
>>>True 

但是當我刪除逗號符號:

ind2 = tools.mutGaussian(mutant, mu=0.0, sigma=0.2, indpb=0.2) 
print (ind2 is mutant) 
>>>False 

返回false。 如果有人能解釋這背後的機制,那將是非常感謝。

+2

您正在將包含一個元素的迭代器分配給* tuple *名稱。 –

+0

換句話說,在你的第二個版本中,'ind2 [0]是突變體'將起作用。 –

+0

只需鍵入'ind2'即可準確查看變量在每種情況下的含義。你會看到它是兩個相似但不同的值。 –

回答

3

deap.tools.mutGaussian() function你調用返回包含單個值的元組

返回:一個單獨的元組。

當您離開逗號時,您將生成的元組分配給單個變量。

使用這個逗號,你要求Python將右邊的iterable解開成左邊的一系列名字;因爲左側和右側都只有一個元素,這項工作。您將的值解壓到返回的元組中,並將其轉換爲單個變量。

Assignment statements reference documenation

賦值語句計算表達式列表(記住,這可以是單個表達式或逗號分隔的列表,後者產生的元組)和單一的所得對象分配給每個目標列表,從左到右。

如果你想測試,而無需使用迭代分配是單個值,你就必須手動得到一個值從元組:

ind2 = tools.mutGaussian(mutant, mu=0.0, sigma=0.2, indpb=0.2) 
print(ind2[0] is mutant) 

注意[0]索引。

-1

當您使用逗號聲明或分配變量時,您正在創建一個tuple

相關問題