Я запускаю пустой список через следующую функцию: gp
. Идея заключалась в том, чтобы добавить письмо в конец списка, а затем сбросить его, когда оно достигло длины 9. Однако он просто прекращает добавлять новые буквы, как только gp
достигает 9 символов. def upd(gp): gp.append(random.choice(string.letters)) if len(gp) > 9: gp = []
Список Python не сбрасывается после прохождения этого
ответ
Установка gp = []
не мутировать список gp
, он просто выполняет повторную привязку локальная переменнаяgp
быть пустым списком. Этот переупорядоченный внешний список (который был передан функции в gp
).
Что вам нужно сделать, это явно удалить элементы из списка. Вы можете удалить все элементы на одном дыхании, как это:
def upd(gp):
gp.append(random.choice(string.letters))
if len(gp) > 9:
gp[:] = []
Теперь это будет мутировать список gp
на месте, эффективно удаляя все его элементы. Есть и другие способы сделать это, например. del gp[:]
также будет работать, и gp.clear()
в Python 3 (спасибо @PeterDeGlopper).
Или, если не менее 3.3, 'gp.clear()'. –
@PeterDeGlopper: спасибо, я добавил свою точку зрения на мой ответ. – mhawke
@mhawke имеет ответ - я просто укажу, что это обычная ошибка новичка на языках, которые имеют неявную ссылочную семантику (переменные и параметры действуют как ссылки на реальный объект, а не на значение этого объекта, но с неявное разыменование для большинства операций, отличных от назначения из другой неявной ссылки на объект, который копирует ссылку, а не объект). Конечно, есть преимущества - ссылки бывают быстрыми и дешевыми, чтобы не пропускать ссылки, неявные ссылки уменьшают беспорядок и т. Д. – Steve314