Скажем, у меня есть следующая функция:

def get_fullname(first: str, last: str = "Miller"):
    """
    :param first: First name
    :param last: Last name
    :return: Fullname
    """
    return f"{first} {last}"

Я знаю, что могу получить кучу информации о функции, используя модуль inspect:

import inspect
spec = inspect.getfullargspec(get_fullname)
print(spec)
# FullArgSpec(args=['first', 'last'], varargs=None, varkw=None, defaults=('Miller',), kwonlyargs=[], kwonlydefaults=None, annotations={'first': <class 'str'>, 'last': <class 'str'>})

В любом случае я могу программно получить описания этих аргументов? Не выглядит возможно, но просто убедиться. Похоже, это способ PyCharm указывать типы .

4
Johnny Metz 12 Апр 2019 в 02:54

2 ответа

Лучший ответ

Вы можете установить и использовать docstring_parser:

import docstring_parser

def get_fullname(first: str, last: str = "Miller"):
    """
    :param first: First name
    :param last: Last name
    :return: Fullname
    """
    return f"{first} {last}"

doc = docstring_parser.parse(get_fullname.__doc__)
for param in doc.params:
    print(param.arg_name, param.description)
print(doc.returns.description)

Это выводит:

first First name
last Last name
Fullname
2
blhsing 12 Апр 2019 в 00:02

В таких вещах, как функции и классы, есть встроенный атрибут .__doc__ (без установки дополнительных модулей). Например:

def get_fullname(first: str, last: str = "Miller"):
    """
    :param first: First name
    :param last: Last name
    :return: Fullname
    """
    return "{first} {last}"
print(get_fullname.__doc__)

Урожайность:

    :param first: First name
    :param last: Last name
    :return: Fullname

Не уверен, что это то, что вы собираетесь найти. Это просто печатает строку документации напрямую и не анализирует ее как ответ @ blhsing

0
Reedinationer 12 Апр 2019 в 00:24