Программно получить описания аргументов функции python

Допустим, у меня есть следующая функция:

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 для указание типов.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
0
106
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

Также есть встроенный атрибут .__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.

Другие вопросы по теме

Как мне сравнить аргумент в двух списках
Вызов функции без переназначения именованного аргумента
Как передать имя объекта в качестве параметра через переменную, определенную как функцию, в другую функцию?
Как исправить ошибку NaN — значения аргументов не складываются, не вычитаются, не делятся и не умножаются — в JavaScript
Как передать функцию с некоторыми (но не со всеми) аргументами другой функции?
Разбор аргументов командной строки без игнорирования обратной косой черты
Pythonic способ сделать функцию, которая может принимать итерируемые или любое количество аргументов?
Лучший способ сделать функцию, которая может принимать список или любое количество аргументов?
Используйте *args в функции и получите эту ошибку: «ожидаемая строка или байтовый объект»
Как получить доступ к нескольким параметрам для флага командной строки в bash