2016-10-04 265 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