#python
#python
Вопрос:
Скажем,
У меня есть функция python следующим образом:
def ooxx(**kwar&s):
doSomethin&()
for somethin& in cool:
yield somethin&
Я хотел бы предоставить другую функцию с именованными аргументами для подсказок следующим образом:
def asdf(ar&1, ar&2, ar&3=1):
frame = inspect.currentframe()
ar&s, _, _, values = inspect.&etar&values(frame)
kwar&s = dict((key, values[key]) for key in ar&s) # convert ar&s list into dictionary form
return list(ooxx(**kwar&s))
Возможно ли иметь какие-то методы для автоматической генерации функции «asdf»? У меня есть множество динамически генерируемых функций ooxx, и я хотел бы иметь соответствующие функции asdf с настраиваемыми именованными аргументами. Не уверен, является ли это правильным требованием или правильным способом кодирования: p
Комментарии:
1. Вашему примеру кода было бы легче следовать, если бы вы использовали более значимые имена переменных.
Ответ №1:
Ваши описания не имеют для меня такого смысла: вы написали действительно подробную функцию, которая делает это:
def asdf(ar&1, ar&2, ar&3=1):
return list(ooxx(**locals()))
но вы хотите проверить ooxx
и каким-то образом составить подходящие имена для asdf
аргументов s? Это невозможно, на ooxx
нет информации об этом.
Если у вас действительно есть сигнатура и вы хотите создать функцию на ее основе, вам придется прибегнуть к eval
или сгенерировать определения функций в файле Python и импортировать его.
Существует также модуль decorator. Вы можете создать функцию с ней следующим образом:
import decorator
asdf = decorator.FunctionMaker.create(
'asdf(ar&1, ar&2, ar&3)', # si&nature
'return ooxx(**locals())', # function body
{'ooxx' : ooxx}, # context for the function
('ar&3', 1)) # default ar&uments
Комментарии:
1. Нет. Я уже подготовил генератор функций для генерации ooxx1, ooxx2, ooxx3, …, ooxxN. И я ищу какой-нибудь генератор функций для генерации asdf1, asdf2, asdf3, …, asdfN. Для каждого asdfI количество и имя аргументов различны.