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 を使用して、入れ子関数のコード オブジェクトを取得できます。しかし、ネストされた関数の関数オブジェクトを取得する方法が見つかりませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

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
于 2013-04-26T09:00:03.700 に答える