Список python добавляет другой список, приводящий к различным результатам в подмножествах [duplicate]

или возьмите pcntl_fork , fork несколько новых потоков для выполнения curl_exec . Но это не так хорошо, как curl_multi .

29
задан Nima Vaziri 20 May 2013 в 01:52
поделиться

3 ответа

append является деструктивной операцией (он изменяет список вместо того, чтобы возвращать новый список). Идиоматический способ выполнения неразрушающего эквивалента append был бы

l = [1,2,3]
print l + [4] # [1,2,3,4]
print l # [1,2,3]

, чтобы ответить на ваш вопрос, я полагаю, что если append вернул недавно измененный список, пользователи могут подумать, что это были неразрушающими, то есть они могли бы писать код типа

m = l.append("a")
n = l.append("b")

и ожидать, что n будет [1,2,3,"b"]

35
ответ дан xuanji 15 August 2018 в 20:06
поделиться

Одним из советов было бы избежать использования ключевых слов или функций в качестве имен переменных. В вашем коде выше вы используете список как переменную:

list = [1, 2, 3]

Я бы посоветовал использовать list в качестве имени переменной, поскольку list на самом деле уже определен как встроенный тип. Как заметил ChaseTheSun и squiguy, там не так много, а затем

l = [1, 2, 3]
l.append(4)
print l  ## [1, 2, 3, 4]
3
ответ дан mgilson 15 August 2018 в 20:06
поделиться
  • 1
    Спасибо, что указали это, и я хорошо знаю эту практику. Я просто скопировал и вставил код из другого источника. – Nima Vaziri 20 May 2013 в 02:20

Это соглашение в Python, что методы, которые мутируют последовательности, возвращают None.

Рассмотрим:

>>> a_list = [3, 2, 1]
>>> print a_list.sort()
None
>>> a_list
[1, 2, 3]

>>> a_dict = {}
>>> print a_dict.__setitem__('a', 1)
None
>>> a_dict
{'a': 1}

>>> a_set = set()
>>> print a_set.add(1)
None
>>> a_set
set([1])

Начиная с Python 3.3, теперь это больше явно документировано :

Некоторые классы коллекций изменяемы. Методы, которые добавляют, вычитают или изменяют их члены на месте и не возвращают определенный элемент, никогда не возвращают сам экземпляр коллекции, но None.

Часто задаваемые вопросы по дизайну и истории дает обоснование за этим проектным решением (относительно списков):

Почему нет list.sort() возвращает отсортированный список?

] В ситуациях, когда важна производительность, создание копии списка только для сортировки было бы расточительным. Поэтому list.sort() сортирует список на месте. Чтобы напомнить вам об этом, он не возвращает отсортированный список. Таким образом, вы не будете обманываться, чтобы случайно переписать список, когда вам нужна отсортированная копия, но также необходимо сохранить несортированную версию.

В Python 2.4 появилась новая встроенная функция - sorted() - был добавлен. Эта функция создает новый список из предоставленного итерации, сортирует его и возвращает его.

8
ответ дан Steven Rumbalski 15 August 2018 в 20:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: