我有这样的事情:
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中执行此操作,您可以在其中执行函数的前向声明但稍后调用它?
答案 0 :(得分: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()
希望这是你想要的。
答案 1 :(得分: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