提问人:Ηλίας 提问时间:4/10/2014 最后编辑:Martijn PietersΗλίας 更新时间:11/18/2023 访问量:19869
以字符串形式获取 lambda 函数的名称
Get lambda function's name as string
问:
如何获取 lambda 函数的名称?
使用该属性返回:__name__
<lambda>
def myfunc():
pass
myfunc_l = lambda :None
print myfunc.__name__
print myfunc_l.__name__
>>myfunc
>><lambda>
我期待,但我得到了myfunc_l
<lambda>
答:
27赞
Martijn Pieters
4/10/2014
#1
Lambda 是匿名的,这意味着它们没有名称。
如果您觉得他们应该有一个名字,您可以随时为其分配一个名字:__name__
myfunc_l = lambda: None
myfunc_l.__name__ = 'foo'
请注意,Python 无法知道您已将函数对象分配给特定名称;赋值在执行表达式之后进行。请记住,您甚至不必分配:lambda
lambda
lambda
result = (lambda x: x ** 2)(4)
或者您可以将 存储在列表中:lambda
several_lambdas = [lambda y: (y // 2) for y in range(10, 20)]
在这两种情况下,都没有要分配给这些对象的名称。
另一方面,成熟的函数定义是语句,而不是表达式,并且语句要求您指定名称。如果不命名生成的函数,就永远不能使用语句,这就是 Python 可以为对象分配名称的原因:def
def
>>> def foo(): pass
...
>>> print foo.__name__
'foo'
您仍然可以赋值给其他内容,删除全局引用,通过赋值给属性来重命名函数对象,但这不会改变函数的性质。实际上,除了没有上下文来设置初始名称(以及它们只能表示单个表达式)之外,它们实际上是相同的。foo
foo
__name__
lambda
5赞
Benjamin
5/26/2015
#2
解决方法:
使用 inspect 模块,您可以执行以下操作:
from inspect import getsource
get_lambda_name = lambda l: getsource(l).split('=')[0].strip()
print(get_lambda_name(get_lambda_name))
# result: get_lambda_name
这样,您可以获取源代码并提取“匿名”名称。 注意:这在空闲命令行中不起作用。
3赞
Vinayak Thatte
6/30/2022
#3
Lambda 函数名称始终在环境变量中可用,因此应按以下方式访问:
os.environ['AWS_LAMBDA_FUNCTION_NAME']
评论
0赞
rcepre
9/19/2023
这与提出的问题无关。
0赞
Todd
11/18/2023
#4
您可以从 lambda 处理程序参数中获取它。context
请看这里:https://docs.aws.amazon.com/lambda/latest/dg/python-context.html
print("function_name:", context.function_name)
下一个:将文本作为数据帧读入 R
评论
print(lambda: None)