繁体   English   中英

Function 内 function 更改变量值

[英]Function within function to change a variable value

为什么变量 url 没有变化?

def test():
    url = "Start"

    def change():
        global url
        url = "End"

    change()
    print(url)

    return url

测试()

是的,它必须是 function 中的 function。 这样我的代码的 rest 就更简单了。 谢谢你的帮助!

全局变量是在模块的顶级 scope 中定义的变量,而不仅仅是在 function 的 scope 之外定义的任何变量。 change的角度来看, test中定义的变量是一个非局部变量,而不是全局变量。

请改用nonlocal关键字:

def test():
    url = "Start"

    def change():
        nonlocal url
        url = "End"

    change()
    print(url)

    return url

nonlocal导致分配发生在最近的封闭 scope 中,其中定义了url (如果不存在这样的本地scope,则nonlocal声明是语法错误。全局 scope 中的定义不计算在内,与在最近的封闭 Z31A1FD140BE4BEF2D11E121EC8A18A 中查找的自由变量相比,无论是本地还是全局。)


在您原来的 function 中, change确实设置(甚至创建)了一个名为url的全局变量。 例如:

def test():
    url = "Start"

    def change():
        global url
        url = "End"

    change()
    print(url)

    return url

try:
    print(url)
except NameError:
    print("'url' not yet defined")

test()  # Outputs "Start"
print(url)  # Outputs "End"

解决方案是使用nonlocal关键字

def test():
    url = "Start"
    def change():
        nonlocal url
        url = "End"

    change()
    print(url)

    return url

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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