繁体   English   中英

功能之外的Python列表范围

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM