【发布时间】:2022-01-14 18:11:22
【问题描述】:
对不起,如果这很蹩脚,但我对 Python 还是很陌生。
在 Python 中,一切都是对象,我假设在每个对象中,对象本身都可以通过某种方式获得。在对象方法中,self 变量包含它。从对象引用中可以得到类对象(如type(self))。但这怎么能在 lambda 中得到呢?
我可以找出一个正常的功能:
import inspect
def named_func():
func_name = inspect.stack()[0].function
func_obj = inspect.stack()[1].frame.f_locals[func_name]
print(func_name, func_obj, func_obj.xxx)
named_func.xxx = 15
named_func()
输出如下:
named_func <function named_func at 0x7f56e368c2f0> 15
不幸的是,在 lambda 中,inspect.stack()[0].function 在 lambda 中给出了 <lambda>。
有没有办法在 lambda 中获取函数对象?
有没有办法直接获取函数对象(不使用函数名)?
我想象__self__,但它不起作用。
更新
我在 lambda 中尝试过这样的事情:
lambda_func = lambda : inspect.stack()[0]
lambda_func.xxx = 2
print(lambda_func())
打印出来:
FrameInfo(frame=<frame at 0x7f3eee8a6378, file './test_obj.py', line 74, code <lambda>>, filename='./test_obj.py', lineno=74, function='<lambda>', code_context=['lambda_func = lambda : inspect.stack()[0]\n'], index=0)
但是,例如,在这种情况下,有没有办法获取 lambda 对象字段 xxx?为此,应该以某种方式获取 lambda 对象。
【问题讨论】:
-
你能给你的 lambda minimal reproducible example 一个minimal reproducible example 吗?
-
这能回答你的问题吗? How to get current function into a variable?
-
你这样做是为了学习,还是有实际用例?
-
@flakes 引用的问题是关于如何在普通函数中获取对象。这是我的示例代码。但我想更进一步,在 lambda 函数中做类似的事情。
-
对此的 PEP 是 specifically rejected。只需使用命名函数,并使用名称。
标签: python python-3.x lambda