这是我在查看家庭作业中的代码后自己生成的一个问题。
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)
,但我不太清楚为什么会调用某个函数的内存位置,即使这样,为什么它总是在变化而且不一样一个?
答案 0 :(得分:0)
Python不做lambda演算。 Lambda演算不涉及“记忆位置”的概念。你在混合理论与实践:)
调用compose将始终创建一个新的lambda,因为这是In [2]: id(lambda: 1)
Out[2]: 4380732272
In [3]: id(lambda: 1)
Out[3]: 4380642296
表达式的作用。即使你用相同的,不变的参数调用它,你也会得到一个不同的对象:
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
此外,即使你到达数字本身,两个相等的值只会共享cPython中的内存位置,如果它们是< = 256.上面的值会在需要时分配。
public String DuplicatesTEST(String s) {
Set<Character> set = new HashSet<>();
StringBuilder result = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
set.add(s.charAt(i));
}
set.forEach(result::append);
return result.toString();
}