方法不在Python集中链接

Ant*_*dak 5 python set method-chaining

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

>>> f = {1, 2, 3}
>>> g = f.copy().discard(3)
>>> g
>>>
Run Code Online (Sandbox Code Playgroud)

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

>>> g = f.copy()
>>> g
{1, 2, 3}
>>> g.discard(3)
>>> g
{1, 2}
Run Code Online (Sandbox Code Playgroud)

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

hir*_*ist 5

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

所以当你分配

g = f.copy().discard(3)
Run Code Online (Sandbox Code Playgroud)

这相当于

h = f.copy() # now h = f
g = h.discard(3) # g = None; h = {1,2}
Run Code Online (Sandbox Code Playgroud)

离开你g = None.


小智 2

当您这样做时g = f.copy().discard(3),您将在 g 中存储方法“discard(3)”的返回值。在这种情况下,它不会返回任何内容,但会更改对象。这就是为什么在第二种情况下它起作用的原因。