编辑:我的逻辑有些笨拙,none只是推导调用的返回值。 好的,我正在用Python运行一些测试,并遇到执行顺序上的一点差异,这让我理解了它的实现方式,但我想向你们这些优秀的人员请教一下,看看我是否正确,或者还有什么需要注意的地方。考虑以下代码:
>>> 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']
>>>
现在,这告诉我for elem in a:获取下一个可迭代元素,然后应用主体,而推导式在实际执行函数中的每个元素之前调用函数,因此从函数(pop)修改列表导致] none,none,none] 这样对吗?这里发生了什么?
谢谢
test()
不返回任何内容,因此它返回None
。(另外,你应该删除self
参数。) - Sven Marnacha==['a','b']
。它们之间有什么区别??? - Ishtar