基本上我想要一个带有参数列表的装饰器,其中包含的不仅仅是一个能够从 @- 和常规形式调用的函数。我已经“设计”了一个快速的解决方法,但它很丑陋并且会立即以@-form 执行一个函数,这是一个不受欢迎的副作用(这当然是由于 return body_two() 造成的)。
def status_display_with_comment(comment, closure = None):
def body_one(function = None):
def body_two():
print(comment)
#an ugly workaround to be able to run both the @- and regular forms
if function != None:
print("Entering", function.__name__)
function()
print("Exited", function.__name__)
elif closure != None:
print("Entering", closure.__name__)
closure()
print("Exited", closure.__name__)
return body_two()
return body_one
def a_function():
print('a_function executes')
@status_display_with_comment(comment = 'some comment')
def a_function_with_comment():
print('a_function_with_comment executes')
a_function_status_display_with_comment = status_display_with_comment(closure = a_function, comment = 'a comment')
a_function_status_display_with_comment()
提前致谢。
PS:我必须围绕整个关闭的事情。考虑到它可以像在 Scheme 中那样递归地完成(对我来说很久以前),这很有趣。