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

L = 1 
fxn(L) 
print(L) 

나는 위와 같은 기능을 가지고 있습니다. 함수 내에서 전역 변수를 변경하여 fxn (L)을 호출 한 후 L을 인쇄 할 때 함수가 필요하다고 가정합니다. 결국 2로 끝납니다.파이썬 : 매개 변수 인 전역 변수를 변경하는 함수

이렇게 할 방법이 있습니까? 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

관련 문제