如何从 Python 的官方文档中读取函数签名

How does one read the function signatures from Python's official documentation

如果浏览 official Python docs,可以看到各种函数(或 class)签名。

对于example

random.uniform(a, b)

很容易理解:您将两个对象 ab 传递给它(它们是浮点数,它 returns 从它们之间的间隔中随机数)。同样简单易懂的是签名 from

SSLSocket.getpeercert(binary_form=False)

其中还指定了参数的默认值,以防在没有任何参数的情况下调用它。


但是还有一些函数的签名非常奇怪like

min(iterable, *[, key, default])

or

readline.append_history_file(nelements[, filename])

or

csv.register_dialect(name[, dialect[, **fmtparams]])

这些都是什么意思?是否有一些参考指南解释如何阅读 name[, dialect[, **fmtparams]]

这些示例只是从官方 Python 文档中随机抽取的,并未涵盖我遇到的所有签名类型。我需要一个关于如何阅读这些签名的一般性解释。

注意:我知道之前有人问过这个问题,但找不到复制品,所以如果有人找到了,请点我,我会删除我的答案...

这主要是一个simplified EBNF notationregister_dialect(name[, dialect[, **fmtparams]]) 表示 register_dialect 函数采用强制性 name 参数、兼性 dialect 参数和兼性任意关键字参数。

一个常见的表示法是方括号 [] 表示 可选值 。我不确定这是从哪里来的,可能是 BNF 语法。

* 表示 任意数量的位置参数 ** 表示 任意数量的关键字参数

*** 是合法的 python 语法。例如,你可以有一个看起来像 func(*args) 的函数签名。这些在 language reference. An easier reading might be the python tutorial.

中定义

方括号中的参数是可选的。这意味着它们具有默认值,如果您不提供值,则会使用该默认值。如果你看了功能说明,一般都会有解释。

当你有嵌套括号时,意味着如果至少有一个外括号中的参数没有提供,那么内括号中的参数也不能提供。例如:

csv.register_dialect(name[, dialect[, **fmtparams]])

表示:csv.register_dialect(name)有效,csv.register_dialect(name, dialect)有效,csv.register_dialect(name, dialect, **fmtparams)有效但csv.register_dialect(name, **fmtparams)无效。

* 和 ** 是 args 和 kwargs,here 关于它们的更多参考。

下例中的星号表示 keydefault 是仅关键字参数:

min(iterable, *[, key, default])

方括号中的参数是可选的,所以下面文件名是可选的:

readline.append_history_file(nelements[, filename])

带有单个星号的参数意味着该函数可以有任意数量的位置参数,例如:

a_function(a, b, *args)

带有 2 个星号的参数表示该函数可以有任意数量的 关键字 个参数,例如:

class dict(mapping, **kwarg)

一切都在 Python 文档中进行了解释:Function definitions