首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个Python高阶函数的输出是什么?

这个Python高阶函数的输出是什么?
EN

Stack Overflow用户
提问于 2018-02-14 11:51:16
回答 1查看 41关注 0票数 0

这是我在看完作业中的代码后自己提出的问题。

代码语言:javascript
复制
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),但我不是很清楚为什么会调用某些函数的内存位置,即使是这样,为什么它总是变化而不是同一个函数?

EN

回答 1

Stack Overflow用户

发布于 2018-02-14 11:59:26

Python不做lambda演算。Lambda演算不涉及“内存位置”的概念。您正在将理论和实践混合在一起:)

调用compose总是会创建一个新的lambda,因为这就是lambda ...: ...表达式所做的事情。即使你对相同的常量参数调用它,你也会得到一个不同的对象:

代码语言:javascript
复制
In [2]: id(lambda: 1)
Out[2]: 4380732272

In [3]: id(lambda: 1)
Out[3]: 4380642296

此外,即使是数字本身,如果两个相等的值是<= 256时,它们也只能共享cPython中的内存位置。大于该值的值在需要时分配。

代码语言:javascript
复制
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]: 4528833008
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48779370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档