РЕДАКТИРОВАТЬ: моя глупая логика опередила меня. Ничто не является просто возвращением от вызова понимания.
Хорошо, я провожу некоторые тесты на 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 в a: получает следующий итеративный элемент, затем применяет тело, тогда как понимание каким-то образом вызывает функцию для каждого элемента списка, прежде чем фактически выполнить код в функции, поэтому изменяет список из функции (pop) приводит к] none, none, none]
Это правильно? что здесь происходит?
спасибо