You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何自定义inserta函数调用后返回None?求技术解析

问题根源

Python 的 set.add() 方法是原地修改集合,它的返回值固定为 None——不管集合有没有被修改,这个方法都不会返回新集合或者修改后的集合。你代码里把 add() 的返回值赋值给了 a,最后返回 a,自然每次得到的都是 None。

顺便提一句:你用的是普通集合,本身不允许重复元素,所以添加已存在的2不会改变集合内容,但这不是返回None的原因——哪怕你加的是新元素,add()依然返回None。

修正方法

根据你的需求选下面两种方式:

方式1:直接返回修改后的原集合

集合是可变对象,函数里的修改会直接作用于原集合,直接返回传入的集合即可:

x = set([1,2,3])

def inserta(multiconjunto, elemento):
    multiconjunto.add(elemento)
    return multiconjunto

mc1 = inserta(x, 2)
print(mc1)  # 输出 {1,2,3},因为2本来就在集合里

如果添加新元素比如4,就会输出{1,2,3,4}。

方式2:返回集合副本(不改动原集合)

要是不想修改原来的集合,可以先复制一份,给副本加元素后返回:

x = set([1,2,3])

def inserta(multiconjunto, elemento):
    new_set = multiconjunto.copy()
    new_set.add(elemento)
    return new_set

mc1 = inserta(x, 2)
print(mc1)  # 输出 {1,2,3}
print(x)    # 原集合还是 {1,2,3},没被修改

如果你的真实需求是实现支持重复元素的多集合,直接用标准库的collections.Counter更方便:

from collections import Counter

x = Counter([1,2,3])

def inserta(multiconjunto, elemento):
    multiconjunto[elemento] += 1
    return multiconjunto

mc1 = inserta(x, 2)
print(mc1)  # 输出 Counter({1:1, 2:2, 3:1})

内容的提问来源于stack exchange,提问作者Sebastian Nin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:00:53