logo

Получение списка имен параметров в функции Python

Быстрый ответ

Чтобы получить список имен параметров функции в Python, вы можете воспользоваться модулем inspect. Вам поможет функция inspect.signature(), которая дает доступ к необходимым данным. Вот пример использования:

Python
Скопировать код
import inspect

def example_function(param1, param2, kwarg1="default"):
    pass

param_names = [name for name, _ in inspect.signature(example_function).parameters.items()]
print(param_names)  # ['param1', 'param2', 'kwarg1']

Таким образом, можно легко извлечь имена параметров функции.

Обходное решение без использования inspect

Если по каким-то причинам вы не хотите использовать inspect, имена параметров можно извлечь напрямую через атрибут __code__ функции:

Python
Скопировать код
def example_function(param1, param2, kwarg1='default'):
    pass

param_names = example_function.__code__.co_varnames[:example_function.__code__.co_argcount]
print(param_names)  # ('param1', 'param2')

Если вы работаете на Python 2.5 или более ранних версиях, замените __code__ на func_code и __defaults__ на func_defaults.

Обработка параметров со значениями по умолчанию

Чтобы учесть параметры со значениями по умолчанию, воспользуйтесь атрибутом __defaults__:

Python
Скопировать код
def example_function(param1, param2='two', kwarg1='default'):
    pass

default_values = dict(zip(example_function.__code__.co_varnames[example_function.__code__.co_argcount-len(example_function.__defaults__):], example_function.__defaults__))
print(default_values)  # {'param2': 'two', 'kwarg1': 'default'}

Использование параметров внутри функции

При необходимости получить имена параметров прямо во время выполнения функции, используйте locals().keys() в начале вашей функции:

Python
Скопировать код
def example_function(param1, param2, kwarg1='default'):
    params = locals().keys()
    # Сразу копируйте ключи, пока locals() не наполнился другими переменными!
    param_list = list(params)
    # Продолжение функции
    print(param_list)  # ['param1', 'param2', 'kwarg1']

example_function(1, 2)

Скопируйте locals() не откладывая, чтобы избежать получения лишних данных.

Визуализация

Представьте функцию как пещеру🕳️, содержимое которой вам нужно изучить:

Markdown
Скопировать код
Вход в пещеру: def explore_cave(torch, rope, map)

Воспользуйтесь доступными инструментами (параметрами) для исследования:

Python
Скопировать код
inspect.signature(explore_cave).parameters.keys()

Результат будет отображаться на ярлыке рюкзака🎒:

Markdown
Скопировать код
🎒 Содержимое ярлыка: ['🔦', '🪢', '🗺️']  
# Для чего нужен рюкзак с большим количеством карманов, если есть списки Python?

Каждый параметр помогает упростить навигацию по коду, подобно кирке в Minecraft.⛏️

Специфические сценарии и особенности

Динамические функции

Если вы работаете с динамически создаваемыми функциями с помощью types.FunctionType или функциями, модифицированными декораторами, inspect окажется полезным и в этих ситуациях.

Методы объектов

Если вы применяете inspect к методам объектов, помните о параметре 'self', который всегда присутствует. Возможно, вам понадобится исключить его для получения имен внешних параметров метода.

Аннотации типов

В Python функции могут снабжаться аннотациями типов. Если это важно для вашей работы, inspect.signature() поможет получить все необходимые данные для статического анализа кода или кастомной логики, ориентированной на типизацию.

Полезные материалы

  1. inspect — Inspect live objects. Python 3.12.1 documentation — Подробная документация по модулю inspect.
  2. python – How to get method parameter names? – Stack Overflow — Обсуждение на Stack Overflow о том, как получить имена параметров функций в Python.
  3. Python args and kwargs: Demystified – Real Python — Разъяснение путаницы с args и kwargs.
  4. PEP 526 – Syntax for Variable Annotations | peps.python.org — Детали о синтаксисе аннотаций типов в Python Enhancement Proposal.
    1. More Control Flow Tools — Python 3.12.1 documentation
    — Справочное руководство Python по определению функций.