python基础-装饰器decorator


什么是装饰器?

定义:本质是函数,用于装饰其他函数,就是为其他函数添加附加功能

原则:
1.不能修改被装饰的函数的源代码
2.不能修改被装饰的函数的调用方式

实现装饰器知识储备:
1.函数即“变量”
2.高阶函数

什么高阶函数:
			把一个函数名当作实参传给另外一个函数(不修改被装饰函数的情况下为其添加功能)
			返回值中包含函数名(不修改函数的调用方法)

3.嵌套函数

就是在一个函数里用def定义另外一个函数

装饰器实例

1、无参数函数—计时装饰器

import time

def timmer(func):					#func = test1
	def warpper():
		start_time = time.time()
		func()						#运行test1()
		stop_time = time.time()
		print('The function run time is %s' %(stop_time-start_time))
	return warpper
		
@timmer			#test1 = timmer(test),相当于test1 = warpper
def test1():
	time.sleep(2)
	print('In the test1')

if __name__ == "__main__":
	test1()

2、有参数函数

import time

def timmer(func):					#func = test1
	def warpper(*args,**kwargs):
		start_time = time.time()
		func(*args,**kwargs)						#运行test1()
		stop_time = time.time()
		print('The function run time is %s' %(stop_time-start_time))
	return warpper
		
@timmer			#test1 = timmer(test),相当于test1 = warpper
def test1(name):
	time.sleep(2)
	print('My Name is %s' %name)

if __name__ == "__main__":
	name = 'Hua'
	test1(name)

3、有参数装饰器

user = 'hua'
password = '123456'

def auth(auth_type):
    def outer_rapper(func):
        def wrapper(*args,**kwargs):
            
            use = input('user:')
            pswd = input('password:')

            if auth_type == 'local':
                if use == user and pswd == password:
                    func()
            
            elif auth_type == 'ldap':
                print('从ldap查找账户密码。。。')
                func()

        return wrapper
    return outer_rapper

def index():
    print('index page!')

@auth(auth_type = 'local')
def home():
    print('home page!')

@auth(auth_type = 'ldap')
def edit():
    print('edit page!')

if __name__ == "__main__":
    
    index()
    print('-'*30)
    home()
    print('-'*30)
    edit()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值