python中的装饰器

1、函数即变量

2、高阶函数

3、嵌套函数

 

高阶函数 + 嵌套函数 =》 装饰器

# Author:dancheng
import time
def timmer(func):
    def warpper(*args, **kwargs):
        start_time = time.time()
        func()
        stop_time = time.time()
        print('the func run time is %s' %(stop_time - start_time))
    return warpper

@timmer     #装饰器
def test1():
    time.sleep(3)
    print('in the test1')
test1()

1、高阶函数

import time
def bar():
    time.sleep(3)
    print('int the bar')
def test2(func):
    print(func)
    return func
#print(test2(bar))
t = test2(bar)
t()

2、嵌套函数

def foo():
    print('in the foo')
    def bar():
        print('in the bar')
    bar()
foo()

3、装饰器

import time
def timer(func):
    def deco():
        start_time = time.time()
        func()
        stop_time = time.time()
        print("the func run time is %s" % (stop_time - start_time))
    return deco

@timer
def test1():
    time.sleep(3)
    print('in the test1')
@timer
def test2():
    time.sleep(3)
    print('in the test2')

test1()
test2()

带参数的1

import time
def timer(func):
    def deco(*args, **kwargs):
        start_time = time.time()
        func(*args, **kwargs)
        stop_time = time.time()
        print("the func run time is %s" % (stop_time - start_time))
    return deco
@timer
def test3(name, age):
    print('My Name Is', name, age)
test3('first', 22)

带参数2

# Author:dancheng
import time
user, passwd = 'dancheng', '123'
def auth(func):
    def wrapper(*args, **kwargs):
        username = input('Username:').strip()
        password = input('Password:').strip()

        if user == username and passwd == password:
            print('\033[32;1mUser has passed authentication\033[0m')
            res = func(*args,**kwargs)
            print('---after authentication---')
            return res
        else:
            exit('\033[31;1mInvalid username or password\033[0m')
    return wrapper

def index():
    print('welcome to index page')
@auth
def home():
    print('welcome to home page')
    return 'from home'
@auth
def bbs():
    print('welcome to bbs page')

index()
print(home())
bbs()

带参数3

# Author:dancheng
import time
user, passwd = 'dancheng', '123'
def auth(auth_type):
    def outer_wrapper(func):
        def wrapper(*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 passed authentication\033[0m')
                    res = func(*args, **kwargs)
                    print('---after authentication---')
                    return res
                else:
                    exit('\033[31;1mInvalid username or password\033[0m')
            elif auth_type == 'ldap':
                print("ldap")
        return wrapper
    return outer_wrapper

def index():
    print('welcome to index page')
@auth(auth_type='local')
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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值