python set.remove 行为和其他内置函数

标签 python set

在 Python 2.7.x 中

In [21]: s = set([-1, -1, -1, 0, -1, 0, 0, 0, 0]).remove(-1)

In [22]: type(s)
Out[22]: NoneType

In [23]: s = set([-1, -1, -1, 0, -1, 0, 0, 0, 0])

In [24]: type(s)
Out[24]: set

In [25]: s.remove(-1)

In [26]: type(s)
Out[26]: set

In [27]: s
Out[27]: set([0])

为什么函数链在上面的例子中没有按预期工作?

最佳答案

通常,对于 python 内置函数,如果该方法修改了对象,它会返回 None 以绝对明确地表明该对象已被就地修改。在这种情况下,set.remove 就地修改了集合,因此按照惯例,它应该返回 None

例如,您将看到与 list.removelist.appendset.add 相同的行为。

这让来自不同语言的人感到震惊,在这些语言中,一种方法改变对象并(有效地)返回 self 是很常见的。它很方便,因为它允许很好地链接方法......但是,核心 python 开发人员选择了不同的路径,因为他们相信(并且我同意)从长远来看,它会导致更清晰更明显的代码。我建议您在自己的 Python 代码中使用 Python 的约定(当然,您可以完全无视该建议)。

关于python set.remove 行为和其他内置函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19700390/

相关文章:

mysql - 如何将另一个表中的一组值存储在 MySQL 的字段中

Ruby 删除三重引号

python - 在 ios 上的 kivy 应用程序中写入/保存文件的问题

python - 可编程透明转发代理

python - 如何为 seaborn catplot 的每个子图自定义文本标记标签

python - Numpy 的 asarray() 不适用于 csr_matrix

Java集合规定

python - lambda 函数闭包捕获什么?

Java集测试

java - 如何将对象数组转为自定义类型数组(涉及ArrayList)