python学习之装饰器

1. 装饰器:
2. 定义:本质使函数,(装饰其他函数)就是为其他函数添加附加功能
3. 原则:1.不能修改被装饰的函数的源代码
         2.不能修改被装饰的函数的调用方式
4. 实现装饰器知识储备:
   1.函数即“变量”
   2.高阶函数
     a: 把一个函数名当作实参传给另外一个函数(不修改被装饰函数的源代码的情况下为其添加功能)
     b: 返回值中包含函数名(不修改函数的调用)
   3.嵌套函数
   高阶函数+嵌套函数=》装饰器


 
 
  
  
示例1:
__Author__: "zhou"

import time
def decotor(func):
    def warapper(*argv,**kwargs):
        start_time=time.time()
        func(*argv,**kwargs)
        stop_time=time.time()
        print("func is run time %s" %(stop_time-start_time))
    return warapper

@decotor
def test1():
    time.sleep(3)
    print("in the test1")

@decotor
def test2(name,age):
    time.sleep(3)
    print("in the test2")
    print("name=%s,age=%s" %(name,age))
test1()
test2('zhou',22)
***********************************************************
示例2:
__Author__: "zhou"

user,passwd = 'zhou','abc123'

def auth(auth_type):
    print("auth func:",auth_type)
    def outer_wrapper(func):
        def wrapper(*args, **kwargs):
            print("wrapper func args:",*args,**kwargs)
            if auth_type == "local":
                username = input("Username:").strip()
                password = input("Password:").strip()
                if user == username and passwd == password:
                    print("\033[32;1mUser has ped authentication\033[0m")
                    res = func(*args, **kwargs)
                    return res
                else:
                    print("\033[31;1mUser authentication faild\033[0m")
            elif auth_type == "ldap":
                print("这个不会")
        return wrapper
    return outer_wrapper

def index():
    print("welcome to index page")

@auth(auth_type="local") # home = auth()
def home():
    print("welcome to home page")
    return "from home"

@auth(auth_type="ldap")
def bbs():
    print("welcome to bbs page")

index()
print(home())
bbs()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值