如果人们浏览official Python docs,则可以看到各种类型的函数(或类)签名。
对于example
random.uniform(a,b)
易于理解:您将两个对象a
和b
(它们是浮点数,并从它们之间的间隔返回一个随机数)传递给它。同样容易理解的是签名from
SSLSocket.getpeercert(binary_form = False)
还为该参数指定了默认值,以防在没有任何参数的情况下调用它。
但是,还有一些带有真正奇怪的签名like
的函数min(可迭代,* [,键,默认])
readline.append_history_file(元素[,文件名])
csv.register_dialect(name [,方言[,** fmtparams]])
这些都是什么意思?是否有一些参考指南说明如何阅读类似name[, dialect[, **fmtparams]]
的内容?
这些示例只是从Python官方文档中随机抽取的,并没有涵盖我遇到的所有签名类型。我需要有关如何读取这些签名的一般说明。
答案 0 :(得分:2)
NB:我知道这已经被问过了,但是找不到重复项,所以如果有人这样做,请给我开个小口,我将删除我的答案...
这主要是simplified EBNF notation。 register_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关于它们的更多参考。