python - 如何将函数作为参数传递给另一个函数,而不自动运行它
问题描述
我有 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 也应该是空的。想知道我做错了什么。
解决方案
问题是当您尝试将函数作为参数传递时,您正在调用它。与其将其传递为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()
推荐阅读
- java - 强制java程序使用GTK2
- mongodb - 使用 mongoose/mongodb 运算符检查相关实体中的字段
- c - 我可以使用 stdlib 函数的#define 表示吗?
- java - SonarLint|SonarQube - 批量创建 @SuppressWarnings
- python - 从列中的行中删除 '[]' 和 '()'
- r - 在 R studio 中安装包“ncdf4”失败
- c++ - 尝试在 C++ 中创建简单类时出现未定义的引用错误
- android - 如何编写 android 应用程序以自动切换移动/蜂窝数据的默认 SIM 卡
- visual-studio-code - 如何在将 VS Code 升级到新版本时停止从 VS Code 扩展运行我的服务?
- c# - Specflow:代码文件中的参数不存储specflow中特征文件的最新值