先来看两段代码。
# 代码段一 x = 10 def bar(): print(x) bar() # 输出 10 # 代码段二 x = 10 def foo(): print(x) x += 1 foo() # 输出 Traceback (most recent call last): ... UnboundLocalError: local variable 'x' referenced before assignment可以看到,第一段代码能够正常工作,然而第二段似乎有些令人意外,为什么呢?
这是因为在对作用域中的变量进行赋值时,该变量将成为该作用域的局部变量,并隐藏外部作用域中相同命名的变量。我们来看第二段中的代码,foo函数中的最后一个语句给x分配了一个新值,编译器会将其识别为局部变量。因此,前面的print(x)尝试打印未初始化的局部变量时就会导致错误。那想实现在函数内修改函数外部同名变量的功能,应该怎么办呢?
我们可以通过将x声明为全局来访问外部作用域中的变量:
x = 10 def foo(): global x print(x) x += 1 foo()print(x) # 输出 10 11
通过global关键字的显式声明,就可以在函数作用域内访问外部作用域中的同名变量并进行值的修改。当然我们也可以通过nonlocal关键字在嵌套作用域中执行类似的操作:
def foo(): x = 10 def bar(): nonlocal x print(x) x += 1 bar() print(x) foo() # 输出 10 11 往期精彩回顾 适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑 AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:
https://t.zsxq.com/y7uvZF6
本站qq群704220115。
加入微信群请扫码: