Python学习-装饰器

装饰器:

最基本的结构:


def decorator():   # 装饰
    def wrapper():  # 被封装
        pass
    return wrapper

基本使用:

import time

def decorator(func):

    def wrapper():

        print(time.time())

        func()

    return wrapper

def f1():

    print('This is function')

f = decorator(f1)

f()

结果:
1548663586.370373
This is function

具体效果:

加入一个 @ 符号语法糖。之后,可以不改变原有函数的格式,添加自己想要的格式如下:

import time
def decorator(func):
    def wrapper():
        print(time.time())
        func()
    return wrapper

@decorator
def f1():
    print('This is function')
# f = decorator(f1)
# f()

#使用 @ 符号增加 语法糖
f1()

结果:
1548663940.191054
This is function

可变参数的使用:

* + 一个参数名: 如: args  - >     *args  来支持不同个数的参数传递

列:

import time
def decorator(func):
    def wrapper(*args):
        print(time.time())
        func(*args)
    return wrapper

@decorator
def f1():
    print('This is function')
@decorator
def f2(func_name,func_name1):
    print('This is function'+ func_name)
    print('This is function'+ func_name1)
# f = decorator(f1)
# f()

#使用 @ 符号增加 语法糖
f2('I am 1','I am 2')

结果:
1548665004.118927
This is functionI am 1
This is functionI am 2

关键字参数的支持:

**kw   如: def f2(func_name,func_name1,**kw):

列:

import time
def decorator(func):
    def wrapper(*args,**kw):
        print(time.time())
        func(*args,**kw)  #这里去使用装饰进入值
    return wrapper

# @decorator
# def f1():
#     print('This is function')
@decorator
def f2(func_name,func_name1,**kw):
    print('This is function'+ func_name)
    print('This is function'+ func_name1)
    print(kw)

# @decorator    
# def f3(func_name,func_name1):
#     print('This is function'+ func_name)
#     print('This is function'+ func_name1)
# f = decorator(f1)
# f()

#使用 @ 符号增加 语法糖
f2('I am 1','I am 2',a = 1,b = 2)


结果:
1548665512.175861
This is functionI am 1
This is functionI am 2
{'a': 1, 'b': 2}
发布了37 篇原创文章 · 获赞 4 · 访问量 6840

猜你喜欢

转载自blog.csdn.net/m0_37918421/article/details/86679081