help_f= "The Syntax is lambda x: f(x), where f(x) is the function in python lenguage"
parser.add_argument("-f",dest="f", type=function, help=help_f, required=True)
params = parser.parse_args()
method( params.f)我有这样的想法,-f参数是一个lambda。但是,当我从bash shell调用时,我不知道该如何做,因为如果尝试:
python archive.py -f lambda x: 2*x-4我收到错误:"error: argument -f: invalid function value: 'x : x-4'“
有人帮忙吗?
发布于 2018-09-20 22:35:06
为了能够访问导入的函数/模块,您需要将globals传递给eval。例如:
>>> from math import exp # anything in global scope will be accessible
>>> lambda_t = 'lambda x: exp(x)'
>>> l = eval(lambda_t, globals())
>>> l(2)
7.38905609893065要将此操作作为参数,您需要接受一个字符串并在之后处理它,或者将lambda的创建包装在另一个函数中。您可以将其作为type参数传递以处理转换。
import argparse
from math import exp
def create_lambda_with_globals(s):
return eval(s, globals())
parser = argparse.ArgumentParser()
help_f= "The Syntax is lambda x: f(x), where f(x) is the function in python language"
parser.add_argument("-f",dest="f", type=create_lambda_with_globals, help=help_f, required=True)
params = parser.parse_args() # the lambda is now defined in params.f
print(params.f(2)) # run the lambda with an input of 2从命令行运行此命令:
python test.py -f 'lambda x: exp(x)'
7.38905609893https://stackoverflow.com/questions/52431265
复制相似问题