【发布时间】:2016-10-04 06:10:24
【问题描述】:
这个问题是我的一个学生提出的关于以下代码的问题的结果,老实说,我完全被难住了。任何帮助将不胜感激。
当我运行这段代码时:
#test 2
a = 1
def func2(x):
x = x + a
return(x)
print(func2(3))
它工作得很好。它能够获取全局范围的变量 a 并使用它的值来执行计算并返回值 4。
但是,如果我将其更改为:
# test 3
a = 1
def func3(x):
a = x + a
return(x)
print(func3(3))
然后我得到一个错误:
赋值前引用的局部变量'a'
为什么只有当我想将函数内的 a 的值更新为基于其原始值的新值时才会出现此错误?我不明白什么?我觉得第二段代码应该可以正常工作。
提前感谢您提供的任何帮助和见解。
【问题讨论】:
-
就我个人而言,我总是在函数顶部的全局变量上声明
global,即使我只是在阅读它们(这绝对是不必要的)。它是纪录片,在某种程度上是防御性的。一种看待它的方式是在 Python 中不鼓励使用全局变量,因为它们破坏了封装。所以,是的,他们有点尴尬。尽量避免它们。
标签: python python-3.x variables scope global-variables