3

関数内の関数が与えられた場合、外部関数から内部関数を呼び出すにはどうすればよいですか?

元。

def a():
    print 'a'
    def b():
        print 'b'
        def c():
            print 'c'

def d():
    # how would I now call a, b and c from here?
    def e():
        # how would I call a, b and c from here as well?

はい、私はそれが恐ろしいコード構造であり、実行すべきではないことを知っています-しかし、どのようにそれを行いますか?

編集:デコレータを使用してこれを行う方法はありますか?

4

4 に答える 4

8

それはいけません。 bcは内部のローカル変数であり、実行中a以外は存在しませんa

(これらは定数であるため、技術的には 経由でアクセスできますa.__code__.co_constsが、これはたとえひどいコード構造で大丈夫だとしても、実際の解決策ではありません。関数を で実行するexec必要があり、それに引数を渡すことはできません。)

于 2012-08-20T05:25:31.590 に答える
2

これらの関数は外側の関数が呼び出されたときに作成され、外側の関数が終了すると破棄されるため、できません。他の場所からアクセスしたい場合は、内部関数への参照を永続的な場所に置く必要があります。

于 2012-08-20T05:25:22.443 に答える
0

内部関数を返すように外部関数を変更できます

于 2012-08-20T11:06:54.913 に答える