码迷,mamicode.com
首页 > 其他好文 > 详细

项目实践 修饰器

时间:2020-05-13 09:58:57      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:decorator   this   类装饰器   app   rap   strong   span   函数   http   

def foo():
    print("foo")


def bar(func):#func是一个指针
    func()

print(id(foo))

print(set)#set是一个类
print(set())#加上()后set是一个实例

bar(foo)
#修饰器的好处,方便添加日志
#添加日志的土方法
def foo():
    print("This is foo")

def doo():
    print("This is doo")

def use_logging(func):
    print("B band"+func.__name__)#此时的B是可以修改的,比如换了一家银行,改一下这里就很方便的修改了所有,有点像define
    func()

use_logging(foo)
use_logging(doo)
#自定义模块和包
def use_logging(func):
    def wrapper():
        print("B band"+func.__name__)#把foo当参数传进来,执行func()就相当于执行foo()
        return func()#加括号了
    return wrapper
def foo():
    print("This is foo")

def doo():
    print("This is doo")

foo = use_logging(foo)#执行foo相当于执行wrapper了
doo = use_logging(doo)
foo()
doo()
#添加日志的标准方法
def use_logging(func):
    def old_logging():
        print(func.__name__)#此时的B是可以修改的,比如换了一家银行,改一下这里就很方便的修改了所有,有点像define
        return func()
    return old_logging

@use_logging#表示foo被using-logging修饰
def foo():
    print("This is foo")

@use_logging #就像是qq里的@一样
def doo():
    print("This is doo")

foo()
doo()
#修饰器里带参数
def use_logging(level):
    def decorator(func):
        def wrapper(*args, **kwargs):
            print(func.__name__)
            return func(*args,**kwargs)
        return wrapper
    return decorator

@use_logging("A level")
def foo(name=mike):
    print(name)

@use_logging("A level")
def doo(paraA, paraB, *args):
    print(paraA, paraB, *args)

foo(jiangeryu)
doo("paraA","paraB",("argsA","argsB")) #可嵌套调用

装饰器里带参数

技术图片

 类装饰器(但是不用重点掌握,重点掌握函数装饰器)

技术图片

 

 技术图片

 

 技术图片

 c最先修饰

 技术图片

 

项目实践 修饰器

标签:decorator   this   类装饰器   app   rap   strong   span   函数   http   

原文地址:https://www.cnblogs.com/banxiabx/p/12879706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!