Расширение списка Python и назначение переменных

Я попытался расширить список и был озадачен тем, что в результате возвращалось значение None. Я пробовал следующее:

>>> a = [1,2]  
>>> b = [3,4]  
>>> a = a.extend(b)  
>>> print a  

None

Наконец я понял, что проблема заключалась в избыточном присвоении «а» в конце. Итак, это работает:

>>> a = [1,2]  
>>> b = [3,4]  
>>> a.extend(b)  
>>> print a  

[1,2,3,4]

Чего я не понимаю, так это почему первая версия не работала. Присвоение «а» было избыточным, но почему оно нарушило операцию?


person monotasker    schedule 15.03.2012    source источник


Ответы (3)


Поскольку, как вы заметили, возвращаемое значение extend равно None. Это распространено в стандартной библиотеке Python; деструктивные операции возвращают None, то есть никакого значения, поэтому у вас не будет соблазна использовать их, как если бы они были чистыми функциями. Прочитайте объяснение Гвидо этого выбора дизайна.

Например, метод sort для списков также возвращает None, а неразрушающая функция sorted возвращает значение.

person Fred Foo    schedule 15.03.2012

Поскольку все функции на месте возвращают None, чтобы подчеркнуть тот факт, что они мутируют свой аргумент. В противном случае вы можете присвоить возвращаемое значение чему-либо, не осознавая, что аргумент также изменился.

person Daniel Roseman    schedule 15.03.2012
comment
Спасибо Даниэль. Ваш ответ, конечно, тоже был правильным. Я просто должен был выбрать один, чтобы принять! - person monotasker; 15.03.2012

Просто .extend() ничего не возвращает

Если вы хотите, вы можете присоединиться к ним как таковым;

a= a+b

person Kevinkeegan    schedule 16.03.2012