python - 如何将函数定义作为字符串传递给 python 脚本

标签 python function parsing command-line-arguments

我想将函数定义 传递给 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 部分?

我想出了一个解决方法:

  1. 从命令行获取字符串函数定义
  2. 将其写入某个临时目录中扩展名为 .py 的文件
  3. 使用这个问题的解决方案从文件加载定义:How to import a module given the full path?
  4. 执行
  5. 清理

但我相信一定有更好的方法。

最佳答案

您可以使用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/

相关文章:

python - 确保 parsedatetime 不会解析无效的日期/时间字符串

python - 如何从无限生成器中干净地捕获?

function - 如何为函数/过程创建别名?

javascript - 当变量发生变化时如何创建动态表?

android getElementsByTagName 返回空列表

java - 用整数替换所有变量

python - Python 中多列之间的条件总和

python - pyplot制表符

python - pip install t sne 不起作用

c++ - 使用函数引用