这是我在看完作业中的代码后自己提出的问题。
def compose(f,g):
return lambda x: f(g(x))
def thrice(f):
return compose(compose(f,f),f)
def add1(x):
return x+1似乎当我尝试compose(thrice,add1)(x),其中x是我决定使用的某个随机整数时,它每次都返回不同的内存位置。根据我自己对lambda演算的了解,上面的代码将简化为thrice(integer),但我不是很清楚为什么会调用某些函数的内存位置,即使是这样,为什么它总是变化而不是同一个函数?
发布于 2018-02-14 11:59:26
Python不做lambda演算。Lambda演算不涉及“内存位置”的概念。您正在将理论和实践混合在一起:)
调用compose总是会创建一个新的lambda,因为这就是lambda ...: ...表达式所做的事情。即使你对相同的常量参数调用它,你也会得到一个不同的对象:
In [2]: id(lambda: 1)
Out[2]: 4380732272
In [3]: id(lambda: 1)
Out[3]: 4380642296此外,即使是数字本身,如果两个相等的值是<= 256时,它们也只能共享cPython中的内存位置。大于该值的值在需要时分配。
In [14]: id(256)
Out[14]: 4497541712
In [15]: id(256)
Out[15]: 4497541712
In [16]: id(257)
Out[16]: 4528835408
In [17]: id(257)
Out[17]: 4528833008https://stackoverflow.com/questions/48779370
复制相似问题