方法不在Python集中链接

时间:2015-09-15 19:13:32

标签: python set method-chaining

我有一个由多个值组成的Python集,我想使用这样的方法链:

>>> f = {1, 2, 3}
>>> g = f.copy().discard(3)
>>> g
>>>

g 变空。但是,它没有链接:

>>> g = f.copy()
>>> g
{1, 2, 3}
>>> g.discard(3)
>>> g
{1, 2}

有人能解释一下这种行为吗?

4 个答案:

答案 0 :(得分:5)

discard()会丢弃集合中的元素并返回None

所以当你指定

g = f.copy().discard(3)

这相当于

h = f.copy() # now h = f
g = h.discard(3) # g = None; h = {1,2}

,只留下g = None

答案 1 :(得分:2)

执行g = f.copy().discard(3)时,您将存储方法的返回值" discard(3)"。在这种情况下,它不返回任何内容,但会更改对象。这就是为什么第二种情况可行。

答案 2 :(得分:1)

您可以改为f - {3},因为集合上的-是值生成而不会修改其输入。

答案 3 :(得分:0)

这是因为.discard返回$

因此,当您执行None时,它会创建g = f.copy().discard(3)的副本,丢弃最后一个元素,然后返回f。由于要返回的最后一件事是分配给变量的内容,None最终会得到g的值。