編輯:我的愚蠢邏輯超過了我。沒有一個是來自理解呼叫的回報。 好吧,我正在python中運行一些測試,並且我在執行順序中遇到了一些差異,這導致我理解它是如何實現的,但是我想讓你很好地運行它以看看我是對的還是還有更多。考慮以下代碼:python list comprehension VS行爲
>>> a = ["a","b","c","d","e"]
>>> def test(self,arg):
... print "testing %s" %(arg)
... a.pop()
...
>>>[test(elem) for elem in a]
testing a
testing b
testing c
[None, None, None]
>>> a
['a', 'b']
#now we try another syntax
>>> a = ["a","b","c","d","e"]
>>> for elem in a:
... print "elem is %s"%(elem)
... test(elem)
...
elem is a
testing a
elem is b
testing b
elem is c
testing c
>>> a
['a', 'b']
>>>
現在,這告訴我,對於ELEM在:獲取下一個可重複的元素然後應用體,而理解實際執行代碼之前以某種方式調用列表中的每個元素的功能在函數中,所以從函數(彈出)修改列表導致] none,none,none]
這是正確的嗎?這裏發生了什麼?
感謝
'test()'不返回任何內容,因此它返回'None'。 (順便說一句,你應該刪除'self'參數。) – 2011-05-03 14:46:58
是的,我只是在玩耍,我想看看它們是否真的相當......但是這裏有一些執行順序。 – cromestant 2011-05-03 14:48:55
重複調整集合的大小(添加或刪除項目)是一種應受懲罰的攻擊。 – delnan 2011-05-03 14:49:35