gpt4 book ai didi

python - 有什么方法可以判断函数对象是 lambda 还是 def?

转载 作者:太空狗 更新时间:2023-10-30 00:30:52 27 4
gpt4 key购买 nike

考虑以下两个函数:

def f1():
return "potato"

f2 = lambda: "potato"
f2.__name__ = f2.__qualname__ = "f2"

如果不检查原始源代码,是否有任何方法可以检测到 f1 是 def 而 f2 是 lambda?

>>> black_magic(f1)
"def"
>>> black_magic(f2)
"lambda"

最佳答案

您可以检查代码对象的 名称。与函数名称不同,代码对象的名称不能重新分配。 lambda 的代码对象的名称仍然是 '<lambda>' :

>>> x = lambda: 5
>>> x.__name__ = 'foo'
>>> x.__name__
'foo'
>>> x.__code__.co_name
'<lambda>'
>>> x.__code__.co_name = 'foo'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: readonly attribute

def 是不可能的定义代码对象名称为 '<lambda>' 的函数的语句. 可以在创建后替换函数的代码对象,但这样做很少见而且很奇怪,可能不值得处理。同样,这不会处理通过手动调用 types.FunctionType 创建的函数或代码对象。或 types.CodeType .我没有看到任何处理 __code__ 的好方法重新分配或手动创建的函数和代码对象。

关于python - 有什么方法可以判断函数对象是 lambda 还是 def?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56451020/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com