Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python set.remove行为和其他内置项_Python_Set - Fatal编程技术网

python set.remove行为和其他内置项

python set.remove行为和其他内置项,python,set,Python,Set,在Python2.7.x中 In [21]: s = set([-1, -1, -1, 0, -1, 0, 0, 0, 0]).remove(-1) In [22]: type(s) Out[22]: NoneType 及 为什么函数链接在上面的示例中不能按预期工作?set.remove()不会返回包含已删除项的集合,而是将它们就地删除。执行此操作时,函数将返回None。因此,从技术上讲,您在第一个示例中执行的是s=None。set.remove()不会返回包含已删除项的集合,而是将其就地删

在Python2.7.x中

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

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


为什么函数链接在上面的示例中不能按预期工作?

set.remove()
不会返回包含已删除项的集合,而是将它们就地删除。执行此操作时,函数将返回
None
。因此,从技术上讲,您在第一个示例中执行的是
s=None

set.remove()
不会返回包含已删除项的集合,而是将其就地删除。执行此操作时,函数将返回
None
。因此,从技术上讲,您在第一个示例中执行的是
s=None

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

您将在
列表中看到相同的行为。例如,删除
列表。追加
设置。添加


对于来自不同语言的人来说,这是一种震惊,因为在这些语言中,一种方法通常会改变对象并(有效地)返回
self
。它很方便,因为它可以很好地链接方法。。。但是,核心python开发人员选择了一条不同的道路,因为他们相信(我也同意),从长远来看,这会导致更干净、更明显的代码。我建议您在自己的python代码中使用python的约定(但当然,您可以完全忽略该建议)。

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

您将在
列表中看到相同的行为。例如,删除
列表。追加
设置。添加

对于来自不同语言的人来说,这是一种震惊,因为在这些语言中,一种方法通常会改变对象并(有效地)返回
self
。它很方便,因为它可以很好地链接方法。。。但是,核心python开发人员选择了一条不同的道路,因为他们相信(我也同意),从长远来看,这会导致更干净、更明显的代码。我建议您在自己的python代码中使用python的约定(当然,您可以完全忽略该建议)

remove
返回
None
。您可以通过如下方式打印
remove
中返回值的类型来确认

print type(s.remove(-1))
你会得到

<type 'NoneType'>

因此,基本上是将
None
设置为
s

remove
返回
None
。您可以通过如下方式打印
remove
中返回值的类型来确认

print type(s.remove(-1))
你会得到

<type 'NoneType'>


因此,基本上您将
None
设置为
s

非常感谢您的回答。在阅读了我写这篇文章时存在的所有答案后,我想我从@mgilson的答案中理解得更好,因为他们提到了“就地”修改,而不是返回对象。但是谢谢,非常感谢你的回答。在阅读了我写这篇文章时存在的所有答案后,我想我从@mgilson的答案中理解得更好,因为他们提到了“就地”修改,而不是返回对象。但是谢谢。你的答案是最简洁、最中肯的!谢谢!如果这个网站只是我们之间的话,我会选择你的答案。然而,我会选择@mgilson的答案,因为对于那些可能会走这条路,并且不熟悉答案上下文中“就地”的意义的读者来说,他们很可能会错过要点,仅仅是因为他们没有胆量。@anicake,这很好:)。谢谢你的回复!你的答案是最简洁、最中肯的!谢谢!如果这个网站只是我们之间的话,我会选择你的答案。然而,我会选择@mgilson的答案,因为对于那些可能会走这条路,并且不熟悉答案上下文中“就地”的意义的读者来说,他们很可能会错过要点,仅仅是因为他们没有胆量。@anicake,这很好:)。谢谢你的回复!非常感谢您抽出时间!(…我正在接受您关于使用python的建议,就像python是用来使用的一样。:-)非常感谢您抽出时间!(…我接受您关于使用python的建议,就像python的用途一样。:-)