【问题标题】:Are functions evaluated when passed as parameters?函数作为参数传递时是否被评估?
【发布时间】:2013-02-21 19:14:22
【问题描述】:

如果我有这样的代码:

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 连接尚未评估?

【问题讨论】:

  • 你有没有试过在每个函数的开头加入打印语句?
  • 请注意,当您将 connect 传递给 run 时,您没有为其提供参数。如果调用了connect,则会收到有关缺少参数的错误。

标签: python function parameter-passing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    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>
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多