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

Python:__init__方法中/符号含义解析(含*args、**kwargs与OrderedDict示例)

嗨,作为Python新手碰到这种语法细节确实容易懵,我来给你把这两个问题拆解清楚~

1. 方法签名中/的含义

这个/是Python 3.8引入的仅限位置参数标记,它的作用是明确划分参数的传递方式:在/之前的参数,只能通过位置传递,绝对不能用关键字参数的形式来指定。

回到你贴的代码里,maxsize=128放在/的前面,意味着调用这个LRU类的时候,maxsize只能像LRU(64)这样传值,要是写成LRU(maxsize=64)就会报错——Python会告诉你这个参数不能用关键字传递。

而/后面的参数(也就是这里的*args和**kwds),就遵循Python常规的参数传递规则了。

2. 带*args和**kwds的默认参数说明

先给你理清这两个可变参数的基础作用:

  • *args:用来接收任意数量的额外位置参数,Python会把这些参数打包成一个元组,方便在方法内部使用。
  • **kwds:用来接收任意数量的额外关键字参数,Python会把这些参数打包成一个字典。

在这个LRU类的__init__里,maxsize有默认值128,同时允许传入额外的位置或关键字参数,然后通过super().__init__(*args, **kwds)把这些参数原封不动地传给父类OrderedDict的构造方法,相当于让父类去处理这些额外参数。

举个实际调用的例子:

# 自定义maxsize,同时传入一组键值对位置参数和一个关键字参数
cache = LRU(64, ('a', 1), ('b', 2), c=3)

这时候:

  • maxsize被赋值为64(通过位置传递)
  • *args会接收('a',1), ('b',2),打包成元组(('a',1), ('b',2))
  • **kwds会接收c=3,打包成字典{'c':3}
    这些参数都会传给OrderedDict的构造方法,最终生成一个包含a:1、b:2、c:3的有序字典,同时缓存的最大容量是64。

另外要注意参数的顺序规则:在Python的方法签名里,参数必须按照「仅限位置参数(/前)→ 位置/关键字参数 → *args → 仅限关键字参数 → **kwds」的顺序来定义,你贴的代码完全符合这个规则,所以是合法的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:12:47