Получение списка имен параметров в функции Python
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы получить список имен параметров функции в Python, вы можете воспользоваться модулем inspect
. Вам поможет функция inspect.signature()
, которая дает доступ к необходимым данным. Вот пример использования:
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__
функции:
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__
:
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()
в начале вашей функции:
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()
не откладывая, чтобы избежать получения лишних данных.
Визуализация
Представьте функцию как пещеру🕳️, содержимое которой вам нужно изучить:
Вход в пещеру: def explore_cave(torch, rope, map)
Воспользуйтесь доступными инструментами (параметрами) для исследования:
inspect.signature(explore_cave).parameters.keys()
Результат будет отображаться на ярлыке рюкзака🎒:
🎒 Содержимое ярлыка: ['🔦', '🪢', '🗺️']
# Для чего нужен рюкзак с большим количеством карманов, если есть списки Python?
Каждый параметр помогает упростить навигацию по коду, подобно кирке в Minecraft.⛏️
Специфические сценарии и особенности
Динамические функции
Если вы работаете с динамически создаваемыми функциями с помощью types.FunctionType
или функциями, модифицированными декораторами, inspect
окажется полезным и в этих ситуациях.
Методы объектов
Если вы применяете inspect
к методам объектов, помните о параметре 'self', который всегда присутствует. Возможно, вам понадобится исключить его для получения имен внешних параметров метода.
Аннотации типов
В Python функции могут снабжаться аннотациями типов. Если это важно для вашей работы, inspect.signature()
поможет получить все необходимые данные для статического анализа кода или кастомной логики, ориентированной на типизацию.
Полезные материалы
- inspect — Inspect live objects. Python 3.12.1 documentation — Подробная документация по модулю inspect.
- python – How to get method parameter names? – Stack Overflow — Обсуждение на Stack Overflow о том, как получить имена параметров функций в Python.
- Python args and kwargs: Demystified – Real Python — Разъяснение путаницы с args и kwargs.
- PEP 526 – Syntax for Variable Annotations | peps.python.org — Детали о синтаксисе аннотаций типов в Python Enhancement Proposal.
- 4. More Control Flow Tools — Python 3.12.1 documentation — Справочное руководство Python по определению функций.