2013-04-26 4 views
2
def foo(): 
    print "I am foo" 
    def bar1(): 
     print "I am bar1" 
    def bar2(): 
     print "I am bar2" 
    def barN(): 
     print "I am barN" 


funobjs_in_foo = get_nest_functions(foo) 

def get_nest_functions(funobj): 
    #how to write this function?? 

중첩 된 함수 객체를 얻는 방법은 무엇입니까? funobj.func_code.co_consts를 통해 중첩 함수의 코드 객체를 가져올 수 있습니다. 하지만 중첩 된 함수에 대한 함수 개체를 가져 오는 방법을 찾지 못했습니다.중첩 된 함수 객체를 얻는 방법은 무엇입니까?

도움을 주시면 감사하겠습니다.

+0

확인이 : http://stackoverflow.com/questions/1095543/get-name-of-calling-functions-module-in-python – Moj

+0

감사합니다. 검사 프레임은 코드 객체 만 보유합니다. 누군가 gc를 사용하여 코드 객체에서 함수 객체를 가져 오는 방법을 제안했습니다. 그러나이 중첩 된 함수 시나리오에서는 작동하지 않습니다. – limi

답변

6

눈치 채 셨던 것처럼 foo.func_code.co_consts에는 기능 개체가 아닌 코드 개체 만 포함되어 있습니다.

함수 개체가 없기 때문에 함수 개체를 가져올 수 없습니다. 함수가 호출 될 때마다 (그리고 코드 객체 만 재사용) 재 작성됩니다. 사용

확인 :

>>> def foo(): 
...  def bar(): 
...   print 'i am bar' 
...  return bar 
.... 
>>> b1 = foo() 
>>> b2 = foo() 
>>> b1 is b2 
False 
>>> b1.func_code is b2.func_code 
True 
관련 문제