如何将函数作为参数传递给另一个函数,而不自动 运行
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()
我有 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()