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

时间:2019-02-06 12:17:16

标签: python signature

如果人们浏览official Python docs,则可以看到各种类型的函数(或类)签名。

对于example

  

random.uniform(a,b)

易于理解:您将两个对象ab(它们是浮点数,并从它们之间的间隔返回一个随机数)传递给它。同样容易理解的是签名from

  

SSLSocket.getpeercert(binary_form = False)

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


但是,还有一些带有真正奇怪的签名like

的函数
  

min(可迭代,* [,键,默认])

or

  

readline.append_history_file(元素[,文件名])

or

  

csv.register_dialect(name [,方言[,** fmtparams]])

这些都是什么意思?是否有一些参考指南说明如何阅读类似name[, dialect[, **fmtparams]]的内容?

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

4 个答案:

答案 0 :(得分:2)

NB:我知道这已经被问过了,但是找不到重复项,所以如果有人这样做,请给我开个小口,我将删除我的答案...

这主要是simplified EBNF notationregister_dialect(name[, dialect[, **fmtparams]])意味着register_dialect函数接受一个强制性name参数,一个兼性dialect参数和一个兼性任意关键字参数。

答案 1 :(得分:2)

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

  

min(可迭代,* [,键,默认])

方括号中的参数是可选的,因此在 filename 下面是可选的:

  

readline.append_history_file(元素[,文件名])

带有单个星号的参数表示该函数可以具有任意数量的 positioning 参数,例如:

  

a_function(a,b,* args)

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

  

class dict(mapping,** kwarg)

Python文档中的所有内容均已说明:Function definitions

答案 2 :(得分:1)

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

*代表任意数量的位置偏差**代表任意数量的关键字广告

***是合法的python语法。例如,您可以使用类似func(*args)的函数签名。这些在language reference中定义。更容易阅读的可能是python tutorial

答案 3 :(得分:1)

方括号中的参数是可选的。这意味着它们具有默认值,如果您不提供值,则使用该默认值。如果您阅读了功能说明,通常会对此进行说明。

如果具有嵌套的方括号,则意味着如果未提供外部方括号中的至少一个参数,则无法提供内部方括号中的参数。例如:

  

csv.register_dialect(name [,方言[,** fmtparams]])

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

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