У меня проблема, которую трудно объяснить, потому что в ней много кода. Таким образом, это сводится к следующей проблеме.Область списка Python вне функции
Я пытаюсь получить доступ к списку ххх вне функции Foo, но я получаю неожиданные результаты. Может кто-нибудь объяснить, почему?
Вот моя функция, которую я создал, чтобы показать проблему:
def foo(xxx = []):
if len(xxx) == 5:
return xxx
xxx += [1]
foo()
return xxx
Если я бегу
print foo()
Я получаю
[1, 1, 1, 1, 1]
чего я ожидал.
Но я хочу, чтобы список xxx был доступен за пределами foo. Таким образом, я делаю
xxx = []
print foo(xxx)
print xxx
Теперь я ожидаю получить список ххх быть
[1, 1, 1, 1, 1]
но что я получаю ххх быть, это
[1]
что я не ожидаю.
Может кто-нибудь объяснить, почему? И можно ли получить доступ к правильному xxx за пределами foo без доступа к нему через выход функции foo? Причина, по которой я хочу это сделать, заключается в том, что в моем фактическом коде я возвращаю что-то другое, кроме как в своей функции foo и вносит изменения в xxx, который я хочу увидеть после того, как выполнен foo. Я могу сделать функцию также возвращать xxx каждый раз, но это сделает мой код излишне громоздким. Но я не уверен, что я компрометирую качество кода. Я не знаю. Пожалуйста, предложите, какой из когда-либо способ является лучшим.
Благодаря
Комментарий устаревший Комментарий: – Hammerite
Передача аргумента заменяет аргумент по умолчанию. Поэтому он будет с радостью изменять другой «список» при условии (и что «список» будет изменен, даже если он не будет возвращен), в противном случае он изменяет общий «список», используемый по умолчанию (к которому невозможно получить доступ, как правило, без его возврата). – ShadowRanger
Просто боковое примечание (это не имеет ничего общего с вашим вопросом): старайтесь избегать изменчивых аргументов по умолчанию. Их поведение противоречит интуиции, и люди, использующие ваш код, могут получить неожиданные результаты. –