有python装饰的问题

时间:2015-06-16 17:54:19

标签: python python-decorators

我试图在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()))()

1 个答案:

答案 0 :(得分:3)

问题是这个表达式:

Form1_Load

在将print函数作为参数传递之前已经调用了它 my_decorator(print(datetime.datetime.now()))() 来电。 my_decorator收到返回值 的my_decorator是无,并试图调用它,产生错误 (无显然不可调用。)

装饰器的参数应该是一个函数 - 你可以 使用lambda创建一个内联,例如:

print