Как прочитать сигнатуры функций из официальной документации Python? - PullRequest
0 голосов
/ 06 февраля 2019

Если вы просматриваете официальные документы Python , вы можете увидеть сигнатуры функций (или классов) разных типов.

Например,

random.uniform (a, b)

прост для понимания: вы передаете ему два объектаa и b (которые являются числами с плавающей запятой и возвращают случайное число из интервала между ними).Также легко понять, что подпись из

SSLSocket.getpeercert (binary_form = False)

, где также указано значение по умолчанию для аргументав случае, если он вызывается без аргументов.


Но есть и функции с очень странными сигнатурами , такие как

min (повторяемые, * [, ключ, по умолчанию])

или

readline.append_history_file (nelements [, имя файла])

или

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

Что все это значит? Есть ли какое-то справочное руководство, объясняющее, как читать такие вещи, как name[, dialect[, **fmtparams]]?

Эти примеры были просто случайным образом взяты из официальных документов Python и не охватывают все типы сигнатур, с которыми я сталкивался.Мне нужно общее объяснение, как читать эти подписи.

Ответы [ 4 ]

0 голосов
/ 06 февраля 2019

Звездочка в приведенном ниже примере означает, что key и default являются аргументами только для ключевых слов:

min (повторяем, * [, key, default)])

Параметр в квадратных скобках является необязательным, поэтому ниже имя файла необязательно:

readline.append_history_file (nelements [, filename])

Аргумент с одной звездочкой означает, что функция может иметь любое количество позиционных аргументов, например:

a_function (a, b, *args)

Аргумент с двумя звездочками означает, что функция может иметь любое количество ключевое слово аргументов, например:

class dict (отображение,** kwarg)

Все объясняется в документации по Python: Определения функций

0 голосов
/ 06 февраля 2019

Общепринятое обозначение - квадратные скобки [] представляют необязательные значения .Я не уверен, откуда это происходит, это может быть грамматика BNF.

* представляет любое количество позиционных арагментов .** представляет любое количество ключевых слов .

* и ** являются допустимым синтаксисом Python.например, вы можете иметь сигнатуру функции, похожую на func(*args).Они определены в справочнике по языку .Более простым чтением может стать учебник по питону .

0 голосов
/ 06 февраля 2019

Параметры в квадратных скобках являются необязательными.Это означает, что у них есть значение по умолчанию, которое используется, если вы не предоставите значение.Если вы читаете описание функции, обычно это объясняется.

Если у вас есть вложенные скобки, это означает, что аргумент во внутренней скобке не может быть предоставлен, если хотя бы один из аргументов во внешней скобке не указан.Например:

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) недопустимо.

* и ** являются аргументами и кваргами, здесь больше ссылок на них.

0 голосов
/ 06 февраля 2019

NB: я знаю, что об этом уже спрашивали, но не могу найти дупла, поэтому, если кто-то найдет, пожалуйста, напишите мне, и я удалю свой ответ ...

Это в основном упрощенное обозначение EBNF .register_dialect(name[, dialect[, **fmtparams]]) означает, что функции register_dialect принимают обязательный аргумент name, факультативный dialect аргумент и факультативные аргументы произвольного ключевого слова.

...