我想将函数定义 传递给 python 命令行脚本。做这个的最好方式是什么?我正在使用 python 2。假设我有这样的脚本:
#myscript.py
x = load_some_data()
my_function = load_function_definition_from_command_line()
print my_function(x)
我想这样调用它:python myscript.py 'def fun(x): return len(x)'
我如何执行 load_function_definition_from_command_line
部分?
我想出了一个解决方法:
- 从命令行获取字符串函数定义
- 将其写入某个临时目录中扩展名为 .py 的文件
- 使用这个问题的解决方案从文件加载定义:How to import a module given the full path?
- 执行
- 清理
但我相信一定有更好的方法。
最佳答案
您可以使用eval
来运行在字符串中定义的代码。像这样:
import sys
x = load_some_data()
function = eval("".join(sys.argv[1:]))
print(function(x))
对于您的具体示例,尽管您可能必须使用类似 lambda x: len(x)
正如@Jan-Spurny 正确指出的那样:“永远,永远,永远不要使用 eval,除非你绝对确定没有其他方法。即便如此,你也应该停下来重新考虑一下。”
在我看来,更好的策略是将数据加载器和执行器转变为一个模块,其中包含一个将函数作为参数并运行所需代码的方法。最终结果是这样的:
import data_loader_and_executor
def function(x):
return len(x)
data_loader_and_executor.run(function)
关于python - 如何将函数定义作为字符串传递给 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34812460/