Я разрабатываю пакет, в котором я хочу изменить входящие функции, чтобы добавить дополнительные функции. Я не уверен, как бы я это сделал. Простой пример того, что я пытаюсь сделать:
def function(argument):
print(argument,end = ",")
# this will not work but an attempt at illustrating what I wish to accomplish
def modify_function(original_function):
return def new_function(arguments):
for i in range(3):
original_function(arguments)
print("finished",end = "")
и запуск исходной функции:
function("hello")
дает результат: hello,
и запуск модифицированной функции:
modified_function = modify_function(function)
modified_function(i)
дает результат: hello,hello,hello,finished
Спасибо @Matiss за то, что он указал способ сделать это. Добавление этого ответа, чтобы он был задокументирован.
def original_function(argument):
print(argument, end = ",")
def modify_function(input_func):
# Using *args and **kwargs allows handling of multiple arguments
# and keyword arguments, in case something more general is required.
def new_func(*args, **kwargs):
for i in range(3):
input_func(*args, **kwargs)
print("finished", end = "")
return new_func
modified_function = modify_function(original_function)
modified_function("hello")
Для других видов модификации, где вы хотите, например. исправить некоторые переданные аргументы, этот способ все еще будет работать, но вы также можете использовать https://docs.python.org/3/library/functools.html#functools.partial.
так что в основном вы пытаетесь создать оболочку. сначала вы определяете новую функцию, затем возвращаете ее имя, не
return def....
, аdef func():...
, а затем послеreturn func