[英]Is it possible to modify a list that exists outside of the scope of a function?
[英]Python list scope outside a function
我遇到了一个难以解释的问题,因为其中涉及很多代码。 因此,归结为以下问题。
我正在尝试访问foo函数外部的列表xxx ,但得到了意外的结果。 有人可以解释为什么吗?
这是我创建的用来显示问题的函数:
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
现在我希望得到列表xxx为
[1, 1, 1, 1, 1]
但是我要成为的xxx是
[1]
这不是我所期望的。
有人可以解释为什么吗? 并且可以在foo外访问正确的xxx而不通过函数foo的输出访问它吗? 我想这样做的原因是因为在我实际的代码,我在我的foo函数返回比其他的东西,使我想看到的FOO已被执行之后改变XXX。 我可以使函数每次也返回xxx,但这会使我的代码不必要地笨重。 但是我不确定是否会损害代码质量。 我不知道。 请提出最好的方法。
谢谢
xxx = []
print foo(xxx)
print xxx
在此代码中,将使用在函数外部创建的列表xxx
调用foo()
。 但是在函数内,您将递归调用不带参数的foo()
,因此它将修改在函数定义时由默认参数值的表达式创建的列表。 (重要的是,每次调用该函数时都提供相同的列表,但不提供该参数的值。)
比较当您像这样定义foo
时发生的情况:
def foo(xxx = None):
if xxx is None:
xxx = []
if len(xxx) == 5:
return xxx
xxx += [1]
foo()
return xxx
...以及像这样定义时会发生什么:
def foo(xxx = None):
if xxx is None:
xxx = []
if len(xxx) == 5:
return xxx
xxx += [1]
foo(xxx)
return xxx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.