Java教程

装饰器学习

本文主要是介绍装饰器学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、基础

##装饰器本质上是一个闭包

 

def decotor(func):
    # print("请先登录")
    def inner(): ###在内部函数中对已有函数进行装饰
        print("请先登录")
        func()
    return inner

@decotor  ###装饰器语法糖写法 等价于comment=decotor(comment),以后comment=inner
def comment():
    print("我发表评论")

# ##调用装饰器对函数进行装饰 commnet不在是comment而是 comment=inner
# comment=decotor(comment)
comment()

2、进阶
(1)理解
import time
def decorator(func):
    def inner():
        print(time.time())
    return inner


@decorator
def work():
    for i in range(90000):
        print(i)



work()
(2)使用
import time
def decorator(func):
    def inner():
        start=time.time()
        func()
        end=time.time()
        print(end-start)
    return inner


@decorator
def work():
    for i in range(990000):
        print(i)



work()
3、通用装饰器

# def decorator(func):
#     def inner(a,b):
#         ###使用装饰器装饰函数的时候,内部函数和要装饰的函数保持一致
#         print("正在努力加载")
#         func(a,b)
#     return inner
#
# @decorator
# def add(num1,num2):
#     print(num1+num2)
#
# add(5,6)

# def decorator(func):
#     def inner(a,b):
#         ###使用装饰器装饰函数的时候,内部函数和要装饰的函数保持一致
#         print("正在努力加载")
#         result=func(a,b)
#         return  result
#     return inner
#
# @decorator
# def add(num1,num2):
#     result=num1+num2
#     return result
#
# print(add(5,6))

def decorator(func):
    def inner(*args,**kwargs):
        ###使用装饰器装饰函数的时候,内部函数和要装饰的函数保持一致
        print("正在努力加载")
        result=func(*args,**kwargs)
        return  result
    return inner

@decorator
def add(*args,**kwargs):
    result=0
    for value in args:
        result+=value
    for value in kwargs.values():
        result+=value
    return result

print(add(4,56,85))

下面这个装饰器可以装饰任意函数
def decorator(func):
    def inner(*args,**kwargs):
        ###使用装饰器装饰函数的时候,内部函数和要装饰的函数保持一致
        print("正在努力加载")
        result=func(*args,**kwargs)
        return  result
    return inner
 
 
这篇关于装饰器学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!