繁体   English   中英

Python:从命令行传递库函数

[英]Python: passing a library function from command line

$ python example.py-函数cos(x)

x = [...]

def foo(f, x):
    return f(x)

有什么聪明的方法可以让我从命令行传递任何函数(为简单起见,在numpy中定义的任何数学函数),以便产生与以下代码相同的结果:

foo(lambda t: numpy.cos(t), x)

正如你所指定的python2.7,你可以使用import_module从回迁功能导入库模块。

>>> np = importlib.import_module('numpy')
>>> cos = getattr(np, 'cos')
>>> cos
<ufunc 'cos'>
>>> cos(3.14159)
-0.99999999999647926

您将需要解析命令行选项(使用@@ HenryKeiter在注释中建议使用argparse ),然后从模块字符串中拆分函数,导入模块并使用getattr来访问该函数。

>>> def loadfunc(dotted_string):
...     params = dotted_string.split('.')
...     func = params[-1]
...     module = '.'.join(params[:-1])
...     mod =  importlib.import_module(module)
...     return getattr(mod, func)
...
>>> loadfunc('os.getcwd')
<built-in function getcwd>
>>> loadfunc('numpy.sin')
<ufunc 'sin'>
>>> f = loadfunc('numpy.cos')
>>> f(3.14159)
-0.99999999999647926

请注意,这不会从全局名称空间加载函数,您可能需要添加一些错误检查。

编辑

此行中也不需要lambda函数

foo(lambda t: numpy.cos(t), x)

您可以直接传递numpy.cos而不对其进行评估

foo(numpy.cos, x)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM