2016-10-04 262 views
0
def fxn(L): 
    """ 
    """ 
    global L = 2 

L = 1 
fxn(L) 
print(L) 

我有一个像上面的函数。假设我需要函数来改变函数内的全局变量,以便在调用fxn(L)后打印L。我结束了2而不是1.Python:函数来改变一个全局变量,这也是参数

有没有办法做到这一点?我不能在函数中使用全局L,因为L也是一个参数。

+4

*为什么*你必须使用同一个名字吗?我可以看到为什么你可能无法改变全局,但为什么你不能改变参数? –

+0

^^是的。我不明白为什么你不能改变你在'fxn'方法声明中定义的'L'参数。 – idjaw

+0

既然你已经问过了,我已经用一种方法来实现这个答案。但是你不应该使用与全局变量相同的变量和使用该全局变量的函数的函数参数。 –

回答

0

您不应该使用与全局变量相同的变量以及使用该全局变量的函数的函数参数。

但是既然你有问题,你可以用globals()locals()来做。下面是示例代码:

>>> x = 5 
>>> def var_test(x): 
...  print('GLOBAL x: ', globals()['x']) 
...  print('LOCAL x: ', locals()['x']) 
...  globals()['x'] = 111 
...  print('GLOBAL x: ', globals()['x']) 
...  print('LOCAL x: ', locals()['x']) 
... 
>>> var_test(20) 
GLOBAL x: 5 
LOCAL x: 20 
GLOBAL x: 111 
LOCAL x: 20 
0

这是一个坏主意,但有办法,例如:

a = 5 

def f(a): 
    def change_a(value): 
     global a 
     a = value 
    change_a(7) 

f(0) 

print(a) # prints 7 

在现实中,很少有任何需要写入全局变量。然后,这个全球变量名称与变量不能改变名称的可能性很小。

如果您处于这种情况,请问自己“我是不是经常使用global?”

+0

这非常鬼鬼祟祟。 –

+0

@ juanpa.arrivillaga:D谢谢,我猜 – zvone