[x]* 在 python 函数文档中是什么意思?

What does [x]* mean in python function documention?

我想为 python 中的 urllib.request.urlopen 指定超时参数 3.

docs 说:

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

[timeout, ]* 是什么意思?

我认为所有可选的命名参数(data=Nonecafile=None ...)必须出现在所有未命名参数之前。

这里看起来 timeout 是一个未命名的参数。但是它出现在之后 data.

只看那个文档,我不知道是否使用:

this post可以看出正确答案是urlopen(url, timeout=123)。 但如果是这样的话,为什么文档说 [timeout, ]*,为什么不直接说 timeout=None

这是独立特征的组合 - 方括号和星号。

[timeout, ] 表示 timeout 是可选参数 - 为简化起见,您可以省略括号和括号内的所有内容 - 您将得到 urllib.request.urlopen(url, data=None, *, cafile=None, capath=None, cadefault=False, context=None).

* 表示以下所有参数都是关键字参数 - 您必须指定参数名称。

看看实际的 source 会很有帮助,它说:

def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
            *, cafile=None, capath=None, cadefault=False, context=None):
// actual implementation

实际上比文档更清楚。