首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python as解析中使用lambda作为参数?

如何在python as解析中使用lambda作为参数?
EN

Stack Overflow用户
提问于 2018-09-20 18:36:00
回答 1查看 3.6K关注 0票数 1
代码语言:javascript
复制
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调用时,我不知道该如何做,因为如果尝试:

代码语言:javascript
复制
python archive.py -f lambda x: 2*x-4

我收到错误:"error: argument -f: invalid function value: 'x : x-4'

有人帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-20 22:35:06

为了能够访问导入的函数/模块,您需要将globals传递给eval。例如:

代码语言:javascript
复制
>>> 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参数传递以处理转换。

代码语言:javascript
复制
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

从命令行运行此命令:

代码语言:javascript
复制
python test.py -f 'lambda x: exp(x)'
7.38905609893
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52431265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档