以下哪一项是Python 3中全局变量的正确用法?
1)在核心脚本中(不是在函数中)声明一次global VAR_NAME,然后在其他地方简单地将变量引用为VAR_NAME
2)在使用全局变量的每个函数中声明一次global VAR_NAME,然后在函数的其余部分和核心脚本中简单地将该变量引用为VAR_NAME
发布于 2012-02-21 03:12:07
如果使用全局变量的方式会被解释为对局部变量的赋值,则需要在函数中使用全局关键字。如果没有global关键字,您将创建一个局部变量,该变量在函数的作用域中隐藏全局变量。
这里有几个例子:
global_var = 1
def example1():
# global keyword is not needed, local_var will be set to 1.
local_var = global_var
def example2():
# global keyword is needed, if you want to set global_var,
# otherwise you will create a local variable.
global_var = 2
def example3():
# Without using the global keyword, this is an error.
# It's an attempt to reference a local variable that has not been declared.
global_var += 1发布于 2016-09-08 03:31:37
“以一种否则会被解释为局部变量赋值的方式”-是的,但这里有一个微妙的细节:
错误:赋值前引用的局部变量'c‘
def work():
c += 3
c = 0
work()
print(c)错误:赋值前引用的局部变量'c‘
c = 0
def work():
c += 3
work()
print(c)def work():
c.append(3)
c = []
work()
print(c)c = []
def work():
c.append(3)
work()
print(c)发布于 2019-05-01 18:53:44
上面答案中的前两种情况和后两种情况之间的主要区别是列表是可变的。对于a=1这样的情况,指针指向1所在的位置,当你说a=2时,指针会移位。
对于可变对象,分配一个内存位置,当使用像append这样的方法时,内存位置本身发生变化,因此可变引用的值被全局更改。
现在最大的问题是,函数如何知道我们正在修改的变量是全局变量还是局部变量,因为如果全局变量是可变的,我们似乎可以修改全局变量,而如果全局变量是不可变的,我们就不能(函数也不会将其识别为全局变量)。
https://stackoverflow.com/questions/9366212
复制相似问题