Discuss / Python / 欢迎交流

欢迎交流

Topic source

import functools  #导入functools模块

def now(func): #定义装饰器函数

    @functools.wraps(func)  #返回被装饰函数的name属性

    def w(*a,**kw):  #定义包装器函数

        print('begin call') #在调用被装饰函数前打印

        func(*a,**kw)  #运行被装饰的函数

        print('end call')  #在调用被装饰函数后打印

    return w

#现在唯一没想通的是,

使它既支持:

@log
def f():
    pass

又支持:

@log('execute')
def f():
    pass

欢迎来一起讨论

补充一句   定义函数的时候输出用print打印不要用return  return不会输出任何结果  不知道为什么

金钟铉

#3 Created at ... [Delete] [Delete and Lock User]

return 作用是返回,除非返回的是有print的函数才会有结果

ywjco_567

#4 Created at ... [Delete] [Delete and Lock User]

print只负责操作打印输出,没有返回值。(注意,Python的所有的操作函数都是“过程”,像VB 的 Sub。)

return print(.......)  == return None == return

1、’用return的时候,你在打印前必须要用一个变量进行接收。

2、装饰器带参数,必须在原有装饰器外面在定义一个接收参数的函数。


  • 1

Reply