首页 > 解决方案 > 如何将函数作为参数传递给另一个函数,而不自动运行它

问题描述

我有 2 个功能 - 一个是检查对象状态,第二个是在允许时创建一些连接。我正在尝试将函数作为参数传递,但仅在条件正确时才返回。问题是它无论如何都在运行。

testList = []

def testObject(name, funct):
  if name == "testName":
    b = funct
    return name + str(b)
  else:
    return None

def someFunction(vector, opt, axis):
    testList.append("Something")
    return opt * axis
  
a = testObject("testName2", someFunction([0,0,0], 1, 6) )

print a
print testList

输出:

print a
print testList
None
['Something']

所以即使“A”是当前的,testList 也应该是空的。想知道我做错了什么。

标签: pythonfunctionarguments

解决方案


问题是当您尝试将函数作为参数传递时,您正在调用它。与其将其传递为someFunction(...),不如将其传递为someFunction

例如

a = testObject("testName2", someFunction )

而不是你所拥有的。这将传递函数'object',准备好被调用。然后,在另一个函数中,只需执行以下操作:

def testObject(name, funct):
  if name == "testName":
    b = funct([0,0,0], 1, 6)

我假设您希望将值作为不同的参数传递,因为我假设这些不是常量,但这应该足以指导您。

如果你想用已经设置的参数传递它,我肯定会看看functools.partial,但请记住它可能会变得有点混乱。

对于部分:

from functools import partial

partial_function = partial(someFunction, [0,0,0], 1, 6)
a = testObject("testName2", partial_function )

------
def testObject(name, funct):
  if name == "testName":
    b = funct()

推荐阅读