Список Python Scope вне функцииPython

Программы на Python
Ответить
Anonymous
 Список Python Scope вне функции

Сообщение Anonymous »

У меня есть проблема, которую трудно объяснить, потому что есть много кода. Таким образом, это сводится к следующей проблеме. Но я получаю неожиданные результаты. Может кто -нибудь объяснить, почему?

Код: Выделить всё

def foo(xxx = []):
if len(xxx) == 5:
return xxx
xxx += [1]
foo()
return xxx
< /code>

Если я запускаю < /p>

print foo()
Я понимаю

Код: Выделить всё

[1, 1, 1, 1, 1]
это то, чего я ожидаю.

Но я хочу, чтобы список xxx был доступен за пределами foo. Итак, я делаю

Код: Выделить всё

xxx = []
print foo(xxx)
print xxx
< /code>

Теперь я ожидаю получить список [b] xxx < /strong>, чтобы быть < /p>

[1, 1, 1, 1, 1]
< /code>

Но то, что я получаю  xxx < /strong> быть, < /p>

[1]
а это не то, чего я ожидаю.

Может кто-нибудь объяснить, почему? И возможно ли получить доступ к правильному xxx[/b] за пределами foo, не обращаясь к нему через выходные данные функции foo? Причина, по которой я хочу это сделать, заключается в том, что в моем реальном коде я возвращаю что-то отличное от моей функции foo и вношу изменения в xxx, которые я хочу видеть после foo. Strong>foo выполнен. Я могу заставить функцию каждый раз возвращать xxx, но это сделает мой код излишне громоздким. Но я не уверен, что я ставлю под угрозу качество кода. Я не знаю. Посоветуйте, какой способ лучше.

Спасибо

Подробнее здесь: https://stackoverflow.com/questions/330 ... a-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»