在Python中,我有global variable
,名为d
,其中d = 3
。我还有两个功能,f1
和f2
。 f1返回d + 4,f2取一个名为d的变量,并返回f1()。我怎么称呼f2(5)
,returns 7
而不是9?我passed 5
,设置d = 5
。所以当调用f1时,d = 5
,那么不是5 + 4 = 9?我在这里缺少什么?
谢谢!
答案 0 :(得分:1)
试试这个:
d = 5
def f1(arg):
return arg+4
def f2(arg):
return f1(arg)
print(f2(d))
输出:
9
答案 1 :(得分:1)
这是因为python的范围规则。如果在函数范围内使用全局变量,则它将被视为新变量,其范围仅限于该函数。因此,当您从f2()调用f1()时,变量d的范围将重置为全局值,即3.要修改它,您必须在函数f1()内使用全局关键字声明d。 以下是工作示例:
d=3
def f1():
return d+4
def f2(val):
global d
d = val
return f1()
a = f2(5)
print a
答案 2 :(得分:1)
d = 3 # this is a global variable
def f1():
'''
when a function doesn't find a local copy of a variable, it uses the global variable.
But, if you try to change a global variable, Python creates a local copy of the same variable and uses the local variable and the global variable remains untouched.
'''
return d + 4
def f2(d):
'''
the d here is a local variable
the global d remains untouched as functions reference the local d everytime d is used
'''
return f1()
f1()始终使用全局d。更改局部参数的值永远不会更改全局变量。
>>> x = 20
>>> def f():
... x = 30
... print x
...
>>> f()
30
>>> print x
20
当在f()中更改x时,Python创建了x的本地副本并更新了本地x。全局x保持不变,这就是为什么即使在函数调用之后,x的值也没有改变。
要解决此问题,即从函数内部更改全局变量的值,必须在使用变量之前将该变量声明为全局变量。这是如何完成的。
>>> x = 20
>>> def g():
... global x
... x = 2
... print x
...
>>> print x
20
>>> g()
2
>>> print x
2