作为参数传递时是否评估函数?

时间:2013-03-06 19:57:44

标签: python function parameter-passing

如果我有这样的代码:

def handler(self):
   self.run(self.connect)

def connect(self, param):
   #do stuff...

def run(self, connector):
   self.runner = connector

当我调用self.run(self.connect)时首先评估了什么?

用连接中的东西运行已经完成了吗?或者连接self.connect还有待评估?

2 个答案:

答案 0 :(得分:6)

将函数作为参数传递不会调用它:

In [105]: def f1(f):
   .....:     print 'hi'
   .....:     return f
   .....: 

In [106]: def f2():
   .....:     print 'hello'
   .....:     

In [107]: f1(f2)
hi
Out[107]: <function __main__.f2>

当然,如果你将函数调用传递给另一个函数,那么你传递的是返回值:

In [108]: f1(f2())
hello
hi

请注意调用它们的顺序:首先调用f2,并将其返回值传递给f1

答案 1 :(得分:2)

您问题中的所有代码都没有实际调用connect(),因此永远不会调用该函数。 self.run(self.connect)所做的只是使self.runner成为self.connect的同义词。