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