Расширение списка Python и назначение переменных - PullRequest
2 голосов
/ 15 марта 2012

Я попытался расширить список и был озадачен возвращением результата со значением 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]

Что я не понимаю, так это , почему первая версия не работала. Назначение 'a' было излишним, но почему оно прервало операцию?

Ответы [ 3 ]

9 голосов
/ 15 марта 2012

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

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

4 голосов
/ 15 марта 2012

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

0 голосов
/ 16 марта 2012

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

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

a = a + b

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...