方法不在 Python 集合中链接

Methods don't chain in Python set

我有一个包含多个值的 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}

有人可以向我解释一下这种行为吗?

discard() 丢弃集合中的一个元素并且 returns None.

所以当你分配

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

这相当于

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

剩下 g = None

因为.discard returns None.

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

当您执行 g = f.copy().discard(3) 时,您在 g 中存储了方法 "discard(3)" 的 return 值。在这种情况下,它 return 没什么,只是改变了对象。这就是为什么在第二种情况下它起作用的原因。

您可以代替 f - {3},因为集合上的 - 会产生价值并且不会修改其输入。