1

関数を定義できる関数を書こうとしています。

私はこれを試しました:

def function_writer():
    print "I am a function writer"  

    def new_function():
        print "I am a new function"
             pass
    pass

function_writer()
new_function()

ただし、私のデバッガーは new_function が定義されていないと文句を言うので、これは明らかにそれを行う方法ではありません。

誰もこれを行う方法を知っていますか?

ありがとう。

4

5 に答える 5

5

次のコードが定義されていないと不平を言うのとまったく同じ理由で、コードは失敗します。i

def integer_writer():
    i = 0

integer_writer()
i

iは関数内のローカル変数でありinteger_writernew_function関数内のローカル変数ですfunction_writer

次のことができます。

def function_writer():
    print "I am a function writer"  

    def new_function():
        print "I am a new function"

    return new_function

new_function = function_writer()
new_function()

この場合、あまり意味がないように見えます (通常、常に を返す関数を定義する意味があまりないのと同じように0) が、function_writerいくつかのパラメーターを取り、それらのパラメーターが関数で使用されている場合、それは戻ります、その後、あなたはビジネスになります。

于 2013-11-06T23:38:24.710 に答える
3
def function_writer():
    print "I am a function writer"  

    def new_function():
        print "I am a new function"

    return new_function

fn_dynamic = function_writer()
fn_dynamic() #call new_function

多分あなたが探しているものは何ですか?(これはほとんどデコレーターが行うことです...渡されたメソッドを変更することを除いて)

別の解決策(これは良い提案ではありませんが、質問に答えます)

def function_writer():
    print "I am a function writer"      
    def new_function():
        print "I am a new function"
    globals()['new_function'] = new_function

function_writer()
new_function()

このタイプの機能は、これが絶対に必要なものであるという非常に説得力のある理由がない限り、Pythonでは通常回避されます...

于 2013-11-06T23:39:05.907 に答える
1

もちろん範囲new_function限定なのでエラーになりfunction_writerます。

def function_writer():
    print "I am a function writer"  

    def new_function():
        print "I am a new function"
        pass

    return new_function

a = function_writer()
#output: "I am a function writer"

a()
#output: "I am a new function"
于 2013-11-06T23:37:08.960 に答える
1

それはあなたがそれをどうするつもりかによります。

  1. 関数内で呼び出すことができます。

    これは、内側の関数が外側の関数のローカル変数にアクセスする必要がある場合に当てはまります。

  2. 外部から呼び出されるように戻すことができます。

    これは、たとえばデコレータの場合はごく普通のことです。

于 2013-11-06T23:37:53.587 に答える
1

関数ファクトリを作成したい場合は、作成した関数を返すだけです!

def factory():
    def new_func():
        print 'Hello!'
  return new_func

f = factory()
f()
于 2013-11-06T23:39:45.093 に答える