2011-12-20 4 views
1

가능한 중복 : 다음 함수에서
Read/Write Python Closures내부 함수를 둘러싼 함수의 변수를 보는 방법?

는 내부 함수는 인수를 수정하지만 바로 사본을 수정하지 않습니다.

def func(): 
    i = 3 
    def inc(i): 
    i = i + 3 
    print i 
    inc(i) 
    inc(i) 
    print i 

func() 

반복되는 코드를 피하고 파이썬의 함수 안에 넣을 수 있습니까? 나는 너무 다음과 같은 노력하지만 UnboundLocalError: local variable 'i' referenced before assignment

def func(): 
    i = 3 
    def inc(): 
    i = i + 3 
    print i 
    inc() 
    inc() 
    print i 

func() 
+0

내가 가장 좋아하는 인터뷰 질문 중 하나입니다. 파이썬에서 변수 가시성에 대해 읽어 보시기 바랍니다. – lig

+0

가능한 복제본 [읽기/쓰기 파이썬 닫기] (http://stackoverflow.com/q/2009402/395760) – delnan

+0

참조 : http://stackoverflow.com/q/8447947/331473 –

답변

3

변수가 외부 범위에 있기 때문에 작동하지 않지만 전역 변수가 아닙니다. 따라서 변수를 인수로 전달해야합니다.

이것은 PEP 3104 주소 문제입니다.

2

일에 대해 오류가 발생합니다 : global를 사용하여 파이썬 2.X에서

def func(): 
    i = 3 
    def inc(): 
    nonlocal i 
    i = i+3 
    print(i) 
    inc() 
    inc() 
    print(i) 

func() 

:이 작업을 수행 할 것 파이썬 3에서

def func(): 
    i = 3 
    def inc(i): 
     return i + 3 
    print i 
    i = inc(i) 
    i = inc(i) 
    print i 

func() 
0

파이썬 3에서는 nonlocal을 사용할 수 있습니다.

>>> def func(): 
    i = 3 
    def inc(): 
     nonlocal i 
     i += 3 
    print(i) 
    inc() 
    inc() 
    print(i) 

>>> func() 
3 
9 
>>> 
관련 문제