【问题标题】:Why does Python assign None if you add a variable to a set while assigning it如果在分配变量时将变量添加到集合中,为什么 Python 不分配无
【发布时间】:2026-01-26 17:05:01
【问题描述】:

而不是将变量添加到正确的集合中,例如:

 set_to_add_to = set()
 set_to_add_to.add("test")

我只是不小心打码了:

 set_to_add_to = set()
 set_to_add_to = set_to_add_to.add("test")

虽然我很欣赏这不是您应该将项目添加到集合中的方式,但它让我感到超乎想象的是,执行上述操作会导致 set_to_add_to 获得 None 的值。我无法弄清楚为什么会发生这种情况 - 它似乎类似于 int_variable = int_variable + 5,它可以正常工作。

同样:

 set_to_add_to = set()
 new_set = set_to_add_to.add("test")

导致new_set 取值None - 为什么不是先将test 添加到set_to_add_to 然后再分配给new_set

【问题讨论】:

  • .add("test") 调用将“test”添加到集合中,但函数本身返回 None。您不应该分配 new_set,而是将分配和 .add() 调用放在不同的行上。即 set_to_add_to.add("test") 就是你所需要的。
  • set 是 python 中的不可变数据结构,add() 函数返回 None

标签: python python-3.x


【解决方案1】:

首先,重要的是要注意所有函数(包括用户定义和内置函数)都返回一些东西。通常,通过return 语句很容易看出函数返回了什么。在没有return 语句的函数中,默认返回None

现在,关于为什么某些 python 常用函数返回 None 的原因。

一般来说,修改对象的python函数返回None。

例如:

x = [4,3,7,8,2]
y = sorted(x) #y is now a sorted list because sorted returns a copy!
y = x.sort() # y is now None because x was sorted in place

一个值得注意的例外是pop() 函数,它返回被弹出的值。

查看这篇文章以获得更详细的解释:

Is making in-place operations return the object a bad idea?

x = [4,3,7,8,2]
val = x.pop() 

#val = 2
#x = [4,3,7,8]

【讨论】:

  • 由于 OP 是 Python 的新手,您可能需要添加 all 函数返回 something,但 something 是如果省略 return,则无
【解决方案2】:

集合的.add() 方法总是返回None,就像.append() 列表方法返回None 一样。

【讨论】:

    最近更新 更多