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

Python加载JSON时为何需要使用**运算符?

为什么实例化Tournament类时要用**运算符加载JSON数据?

相关代码示例

t1 = Tournament("Aeroflot Open", 2010)
json_data = json.dumps(t1.__dict__)
print(json_data)

t = Tournament(**json.loads(json_data)) # <-------------------
print(f"name = {t.name}, year = {t.year}")

先拆解你的代码逻辑:

  • 你通过t1.__dict__拿到了存储Tournament对象属性的字典,转成JSON字符串后,再用json.loads转回来,得到的还是一个Python字典,比如这里是{"name": "Aeroflot Open", "year": 2010}。

为什么必须用**?原因很直接:
如果直接把这个字典传给Tournament(),比如Tournament(json.loads(json_data)),相当于你把整个字典作为单个位置参数传给了类的构造方法,但Tournament的构造方法需要的是name和year这两个独立参数,这样传参会直接报错——参数数量不匹配。

而**是Python里的字典拆包运算符,它能把字典里的键值对拆解成一个个关键字参数。比如**{"name": "Aeroflot Open", "year": 2010}会被自动转换成name="Aeroflot Open", year=2010,这样传给Tournament()就正好匹配构造方法的参数要求,能正确创建出和t1属性一致的实例。

直白点说:

  • 错误传参:Tournament(字典) → 给构造方法塞了1个参数(整个字典)
  • 正确传参:Tournament(**字典) → 给构造方法塞了2个关键字参数,和创建t1时的传参逻辑一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:55:19