小编roo*_*oot的帖子

Python中的函数链

在codewars.com上,我遇到了以下任务:

创建一个add在连续调用时将数字相加的函数.所以add(1)应该回来1,add(1)(2)应该回来1+2,......

虽然我熟悉Python的基础知识,但我从来没有遇到过能够连续调用的函数f(x),即可以被称为的函数f(x)(y)(z)....到目前为止,我甚至不确定如何解释这种表示法.

作为一个数学家,我怀疑f(x)(y)是分配到每个功能x的函数g_{x},然后返回g_{x}(y),同样也f(x)(y)(z).

如果这种解释是正确的,Python将允许我动态创建对我来说非常有趣的函数.我在网上搜索过去一小时,但未能找到正确方向的领先优势.因为我不知道如何调用这个编程概念,所以这可能不会太令人惊讶.

你如何称呼这个概念,我在哪里可以阅读更多相关信息?

python function python-3.x

84
推荐指数
6
解决办法
2万
查看次数

为什么在Python 3中范围(0)==范围(2,2,2)为真?

为什么使用不同值初始化的范围在Python 3中相互比较?

当我在我的解释器中执行以下命令时:

>>> r1 = range(0)
>>> r2 = range(2, 2, 2)
>>> r1 == r2
True
Run Code Online (Sandbox Code Playgroud)

结果是True.为什么会这样?为什么range具有不同参数值的两个不同对象被视为相等?

python identity range python-3.x python-internals

53
推荐指数
5
解决办法
1万
查看次数

更改__hash__的类仍可用于字典访问

我所做的显然不是人们想要做的事情,而是我只是在测试__hash__给定类的实现.

我想看看是否在字典中添加了一个虚假的'hashable'类,然后更改它的哈希值会导致它无法访问它.

我的班级看起来像这样:

class PhonyHash:

    def __hash__(self):
        val = list("A string")
        return id(val)  # always different
Run Code Online (Sandbox Code Playgroud)

在我的IPython控制台中执行以下操作:

>>> p = PhonyHash()
>>> d = { p: "a value"}
>>> hash(p)  # changes hash
Run Code Online (Sandbox Code Playgroud)

然后尝试使用d[p]作品访问元素:

>>> d[p]
"a value"
Run Code Online (Sandbox Code Playgroud)

我明白,这不是应该做的事情,我真的很好奇为什么它有效.不dict使用hash()对象来存储/检索它?这为什么有效?

编辑:正如@VPfB在评论中所指出的sets那样,出于某种原因:

>>> p = PhonyHash()
>>> s = {p}
>>> p in s
False
Run Code Online (Sandbox Code Playgroud)

python dictionary python-3.x

10
推荐指数
1
解决办法
150
查看次数