如何将函数作为参数传递给另一个函数,而不自动 运行

How to pass function as an argument to another function, without running it automatically

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

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 也应该是空的。 想知道我做错了什么。

问题是您在尝试将函数作为参数传递时调用了函数。不要将其作为 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()