Я пишу фреймворк на Python. Когда пользователь объявляет функцию, он делает:
def foo(row, fetch=stuff, query=otherStuff)
def bar(row, query=stuff)
def bar2(row)
Когда сервер видит запрос = значение, он выполняет функцию с аргументом запроса в зависимости от значения. Таким образом, функция получает доступ к результату чего-либо, что сделано бэкендом в своей области видимости.
В настоящее время я строю свои аргументы каждый раз, проверяя, имеют ли значение «запрос», «выборка» и другие элементы «Нет», и запуская его с набором аргументов, которые точно соответствуют запросам пользователя. В противном случае я получил ошибку «получил неожиданный аргумент ключевого слова». Это код в бэкэнде:
#fetch and query is something computed by the backend
if fetch= None and query==None:
userfunction(row)
elif fetch==None:
userunction (row, query=query)
elif query == None:
userfunction (row, fetch=fetch)
else:
userfunction (row,fetch=fetch,query=query)
Это не хорошо; для каждой дополнительной «услуги», которую предлагает бэкэнд, мне нужно написать все комбинации с предыдущими.
Вместо этого я хотел бы прежде всего взять функцию и вручную добавить именованный параметр, прежде чем выполнять его, удаляя весь ненужный код, который выполняет эти проверки. Тогда пользователь будет просто использовать то, что ему действительно нужно.
Я не хочу, чтобы пользователю приходилось изменять функцию, добавляя ненужные ему вещи (и при этом я не хочу, чтобы они указывали kwarg
каждый раз).
Так что я хотел бы привести пример, если это выполнимо, функцию addNamedVar(name, function)
, которая добавляет переменную name
к функции function
.
Я хочу сделать это таким образом, потому что пользовательские функции вызываются много раз, а это означает, что это побудит меня, например, создать dict для именованного var функции (с проверкой) и затем использовать **dict
. Я действительно хотел бы просто изменить функцию один раз, чтобы избежать каких-либо накладных расходов.