python装饰器小计

欢迎光临我的个人主页
研读代码时遇到了python装饰器,所以要搞懂它,这一过程加深了自己对于函数定义与函数调用的体会
一. 装饰器本质就是个函数,用来增加被装饰函数的功能.
二. 使用装饰器的巨大优势:不改变被装饰函数的调用方式; 不修改被装饰函数的源代码
三. 无参数装饰器使用两层嵌套; 带参数装饰器使用三层嵌套
下面举两个简单的例子,为了笔记的方便,定义装饰器函数时我用了三种命名:decorator_para; decorator; wrapper,这样有助于记忆

无参数装饰器

为函数加上计时功能
写两层嵌套装饰器函数时牢记两点:向decorator传入被装饰函数名; decorator返回wrapper

# coding:utf-8
import time
def decorator(func): # 向decorator传入函数名
	def wrapper(*args, **kwargs):
		start = time.time()
		func(*args, **kwargs)
		total = time.time() - start
		print('函数%s的执行时间为:%s秒' % (func.__name__,total))
	return wrapper # decorator返回wrapper

@decorator	#相当于 tesla = decorator(tesla)
def tesla(price='95W'):
	time.sleep(2)
	print('鸥翼门真帅气,不过价格挺刺激:%s' % price)

tesla()
带参数装饰器

为函数加上计时功能, 可以选择显示方式:default方式是不保留小数;normal方式保留两位小数
写三层嵌套装饰器函数时牢记三点:向decorator_para中传入装饰器要用的参数;向decorator传入被装饰函数名; decorator返回wrapper; decorator_para返回decorator


# coding:utf-8
import time

def decorator_para(count_type):
	def decorator(func):
		def wrapper(*args, **kwargs):
			start = time.time()
			func(*args, **kwargs)
			total = time.time() - start
			if count_type == 'default':
				print('函数%s的执行时间为:%s秒' % (func.__name__,total))
			elif count_type == 'normal':
				print('函数%s的执行时间为:%.2f秒' % (func.__name__,total))
		return wrapper
	return decorator
					
@decorator_para('normal')
def tesla(price='95W'):
	time.sleep(2)
	print('鸥翼门真帅气,不过价格挺刺激:%s' % price)

tesla()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值