gpt4 book ai didi

python - 按值比较 lambda 表达式指针

转载 作者:行者123 更新时间:2023-12-01 02:09:56 26 4
gpt4 key购买 nike

考虑以下 Python 程序:

a = lambda x: x
b = lambda x: x
print(a == b)

这显然会输出False,但很清楚为什么会发生这种情况。然而,这是违反直觉的。我想知道是否有任何编程语言(不仅仅是学术语言)能够对 lambda 表达式进行结构比较,并在上面的示例中打印 True ?如果这不能开箱即用,是否有任何聪明的方法来比较 lambda 表达式? .NET 抽象语法树怎么样?

编辑:当我得到答案时,这是工作示例:

# Applies an argument arg to a function f.
apply = lambda f, arg: lambda *args, **kwargs: f(arg, *args, **kwargs)
# Compare two functions by their co_code (see answer below)
equals = lambda l0, l1: l0.__code__.co_code == l1.__code__.co_code

# Defines a function that adds 2 to a provided number.
add_two_0 = apply(add, 2)

# Another way of adding two is twice adding 1.
add_two_1 = apply(apply(add, 1), 1)

# The following statement prints True
equals(add_two_0, add_two_1)

最佳答案

比较代码对象不会达到您想要的效果:两个不同的函数将具有不同的代码对象。

不过,您可以比较每个函数的字节码,可以使用 co_code 获得:

(lambda x:x).__code__.co_code
# b'|\x00\x00S'
(lambda y:y).__code__.co_code
# b'|\x00\x00S'


(lambda y:y+1).__code__.co_code
# b'|\x00\x00d\x01\x00\x17S'
(lambda y:y-1).__code__.co_code
# b'|\x00\x00d\x01\x00\x18S'

因此,您的比较将得出预期的结果:

(lambda x:x).__code__.co_code == (lambda y:y).__code__.co_code
# True
(lambda y:y+1).__code__.co_code == (lambda y:y-1).__code__.co_code
# False

关于python - 按值比较 lambda 表达式指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48762242/

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