我有一个由多个值组成的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}
有人能解释一下这种行为吗?
答案 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
的值。