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)创建一个新函数,该函数在调用时具有参数20result自动添加。

它支持***以及 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 回答