如何在python中传递带参数的函数?

时间:2016-05-24 09:34:37

标签: python

考虑一下:

def function1():
   def nestedfunc(param1, **kw):
      logging.info("nested function %s" % kw) #error
   function2(nestedfunc("is called"), string="not default")


def function2(func, string="default"):
   try:
      #doing some setting
      func()
   finally:
      #reset back to setting

我得到了:

func()
TypeError: 'NoneType' object is not callable

我假设func()没有传递参数,它会导致错误。

为了澄清,希望的结果是能够使用任意数量的参数调用func()。

有谁知道这样做的正确方法是什么?任何建议都会感激不尽!

2 个答案:

答案 0 :(得分:4)

您的function2收到func=None,因为这是nestedfunc()的(默认)返​​回值,使用参数"is called"调用。您可以使用functools.partial来“冻结”某些函数的参数:

from functools import partial

def function1():
   def nestedfunc(param1, **kw):
      logging.info("nested function %s" % kw) #error
   function2(partial(nestedfunc, "is called"), string="not default")

答案 1 :(得分:1)

nestedfunc("is called")是函数调用返回的值:None。您应该将nestedfunc传递给function2 ,而无需先调用它。

如果您想将参数传递给nestedfunc,请先将其传递给function2

def function1():
   def nestedfunc(param1, **kw):
      logging.info("nested function %s" % kw) #error
   function2(nestedfunc, "is called", string="not default")


def function2(func, funcparam, string="default"):
   try:
      #doing some setting
      func(funcparam)
   finally:
      #reset back to setting