我试图在https://realpython.com/blog/python/primer-on-python-decorators/使用优秀的教程来学习更多关于Python装饰器的知识。
我试图偏离脚本并遇到一些问题。代码如下。基本上,当我运行下面的脚本时,第一个函数调用 time_print_function()按预期执行。
但是我在下一个函数调用中遇到错误my_decorator(print(datetime.datetime.now()))()
我希望这会产生与time_print_function()
相同的输出代码
def my_decorator(some_function):
def wrapper(*args):
print "Something is happening before some_function() is called."
if args:
some_function(args)
else:
some_function()
print "Something is happening after some_function() is called."
return wrapper
@my_decorator
def time_print_function():
print(datetime.datetime.now())
time_print_function()
my_decorator(print(datetime.datetime.now()))()
答案 0 :(得分:3)
问题是这个表达式:
Form1_Load
在将print函数作为参数传递之前已经调用了它
my_decorator(print(datetime.datetime.now()))()
来电。 my_decorator
收到返回值
的my_decorator
是无,并试图调用它,产生错误
(无显然不可调用。)
装饰器的参数应该是一个函数 - 你可以 使用lambda创建一个内联,例如:
print