2

私はこのようなものを持っています:

import os
from node import Node

def make_sum(num,done):
    for i in range(0,100):
        num = num + 1
    done(num)

def result(num):
    print num
    return num

node = Node()
node.register(make_sum(20,result))
result(25)

node.pyこれは次のとおりです。

import os

    class Node():

        def __init__(self):
            pass

        def register(self,obj):
            print obj

私がやりたいのは、make_sum()関数呼び出しが関数内から発生するregister()ことです。しかし、現在はregister()関数呼び出し中に呼び出されます。

関数の前方宣言を行うことができますが、後で呼び出すことができるPythonでそのようなことを行うことは可能ですか?

4

2 に答える 2

2

make_sum関数を引数としてメソッドに渡すことができますregister:

node.register(make_sum, 20, result)

次に、メソッドで呼び出します。

class Node():
    def __init__(self):
        pass

    def register(self, f, num, done):
        print f(num, done)

また、次を使用できますlambda

node.register(lambda: make_sum(20, result))

この場合、引数を渡す必要はまったくありません。

class Node():
    def __init__(self):
        pass

    def register(self, f):
        print f()

これがあなたが望んでいたものであることを願っています。

于 2013-09-26T11:02:19.037 に答える
1

functools.partialあなたが望むものを手に入れるためのより直接的な方法のように私には思えます。

from functools import partial

node.register(partial(make_sum, 20,result))

partual(make_sum, 20, result)20呼び出されたときに引数を持ち、result自動的に追加される新しい関数を作成します。

*および**namd 引数をサポートします。

loud_printer = partial(print, *(1, 2, 3), end="")

loud_printer
#>>> functools.partial(<built-in function print>, 1, 2, 3, end='')

loud_printer()
#>>> 1 2 3
于 2013-09-26T11:20:04.240 に答える