2024-05-20 00:01:41 发布
网友
如何获取lambda函数的名称?
使用__name__属性返回<lambda>:
__name__
<lambda>
def myfunc(): pass myfunc_l = lambda :None print myfunc.__name__ print myfunc_l.__name__ >>myfunc >><lambda>
我本来期待着myfunc_l,但我得到了<lambda>
myfunc_l
解决问题:
使用“检查”模块可以执行以下操作:
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
这样您就可以获得源代码并提取“匿名”名称。 注意:这在空闲命令行中不起作用。
lambda是匿名的,这意味着它们没有名称。
如果您认为应该为__name__分配一个名称,则始终可以为其分配一个名称:
myfunc_l = lambda: None myfunc_l.__name__ = 'foo'
请注意,Python不知道您将lambda函数对象分配给了特定的名称;该分配是在执行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
>>> def foo(): pass ... >>> print foo.__name__ 'foo'
您仍然可以将foo赋给其他对象,删除foo全局引用,通过赋给__name__属性重命名函数对象,但它不会更改函数的性质。lambda实际上是一样的,除了没有上下文来设置初始名称(以及它们只能表示单个表达式这一事实)。
foo
解决问题:
使用“检查”模块可以执行以下操作:
这样您就可以获得源代码并提取“匿名”名称。 注意:这在空闲命令行中不起作用。
lambda是匿名的,这意味着它们没有名称。
如果您认为应该为
__name__
分配一个名称,则始终可以为其分配一个名称:请注意,Python不知道您将
lambda
函数对象分配给了特定的名称;该分配是在执行lambda
表达式之后进行的。记住,您甚至不必分配lambda
:或者可以将
lambda
存储在列表中:在这两种情况下,都没有可分配给这些对象的名称。
另一方面,完整的函数定义是语句,而不是表达式,
def
语句要求您指定一个名称。如果不命名结果函数,就不能使用def
语句,这就是Python可以为对象指定名称的原因:您仍然可以将
foo
赋给其他对象,删除foo
全局引用,通过赋给__name__
属性重命名函数对象,但它不会更改函数的性质。lambda
实际上是一样的,除了没有上下文来设置初始名称(以及它们只能表示单个表达式这一事实)。相关问题 更多 >
编程相关推荐