方法不在 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}
,因为集合上的 -
会产生价值并且不会修改其输入。
我有一个包含多个值的 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}
,因为集合上的 -
会产生价值并且不会修改其输入。