[英]Passing command line arguments to Python function in script
[英]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.