РЕДАКТИРОВАТЬ: моя глупая логика опередила меня. None - это просто возврат от вызова понимания. Хорошо, я запускаю некоторые тесты на питоне, и я столкнулся с небольшой разницей в порядке выполнения, что приводит меня к пониманию того, как это реализовано, но я хотел бы запустить его с вами, хорошие люди, чтобы увидеть если я прав или есть больше к этому. Рассмотрим этот код:
>>> 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 в a: получает следующий итерируемый элемент, затем применяет тело, тогда как понимание каким-то образом вызывает функцию для каждого элемента списка перед фактическим выполнением кода в функции, поэтому изменение списка из функции (поп) ведет к ]none, none, none]
Это правильно? что здесь происходит?
Благодарность
test()
ничего не возвращает, поэтому возвращаетNone
. (Кстати, вы должны удалить параметрself
.) - person Sven Marnach   schedule 03.05.2011a==['a','b']
впоследствии. В чем разница??? - person Ishtar   schedule 03.05.2011