如何获取lambda函数的名称?将lambda函数的名称作为字符串获取
使用__name__
属性返回<lambda>
:
def myfunc():
pass
myfunc_l = lambda :None
print myfunc.__name__
print myfunc_l.__name__
>>myfunc
>><lambda>
我期待myfunc_l
但我得到了<lambda>
如何获取lambda函数的名称?将lambda函数的名称作为字符串获取
使用__name__
属性返回<lambda>
:
def myfunc():
pass
myfunc_l = lambda :None
print myfunc.__name__
print myfunc_l.__name__
>>myfunc
>><lambda>
我期待myfunc_l
但我得到了<lambda>
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)]
,并在没有背景是有分配给这些对象的名称。在另一方面
全面的功能定义声明,没有表情,和def
语句需要指定一个名称。你永远不可能用一个def
声明不点名产生的功能,这就是为什么Python可以将名称分配给对象:
>>> def foo(): pass
...
>>> print foo.__name__
'foo'
,您仍然可以分配foo
别的东西,删除foo
全球参考,重命名功能对象通过分配给__name__
属性,但它不会改变函数的性质。 lambda
除了没有上下文来设置初始名称(以及它们只能表示单个表达式的事实)之外,其他的都是相同的。
解决方法:
使用检查模块,你可以这样做:
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
这样你获得源代码,并提取了“无名氏”的名字。 注意:这在Idle命令行中不起作用。
你为什么不试试? – sshashank124
我试过了,我得到的全部是 –
你期望什么名字? – aisbaa