必威体育Betway必威体育官网
当前位置:首页 > IT技术

廖雪峰[009]

时间:2019-10-23 20:45:39来源:IT技术作者:seo实验室小编阅读:60次「手机版」
 

廖雪峰

装饰器 (@语法糖)

作用:在不改变func2的前提下,给其添加更多的功能。

普通装饰器函数

代码思路:

def func1(func):
	def add_func():
		# 在这里添加功能
		return func()
		# func   函数名
		# func() 函数调用 
	return add_func

@func1
def fun2():
	# 原来的功能

func2()
# 等价于 func1(func2)()

被装饰的函数带参数

def func1(func):
	def func2(a,b): # a,b设置需要和x,y一致
		print(a,b) # x,y会被传递进来
		a = 1
		b = 2      # a,b会被改变
		return func()
	return func2()

@func1
def func2(x,y):
	print(x+y)

func2(10,15)

>>> 10 15
>>> 3

装饰器函数带参数

目标:实现在bad day 不出去玩,good day 出去玩。

def func():
	print("bad day")

def func1():
	print("bad day")

实现:

def arg_func(arg):   
	def _func(func):  
		def _func1():  
			if arg == 'good':
				print('hang out')
			if arg == 'bad':
				print('stay home')
			return func()
		return _func1
	return _func
	
# arg_func 装饰器函数的参数接收函数,因为装饰器函数只能是接受一个函数作为参数
# arg_func -> _func 接收装饰器函数的参数
# _func -> _func1   闭包函数 添加功能
# _func1 -> func 执行添加的功能,执行被装饰函数

@arg_func('bad'):
def func():
	print("Bad day")

@arg_func('good'):
def func1():
	print("Good day")

练习

设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间:

# -*- coding: utf-8 -*-
import time, functools
def metric(fn):
    def add_func(*args, **kw):
        t1 = time.time()
        result = fn(*args, **kw)
        t2 = time.time()
        print('%s executed in %s ms' % (fn.__name__, t2 - t1))
        return result
    return add_func

# 测试
@metric
def fast(x, y):
    time.sleep(0.0012)
    return x + y;

@metric
def slow(x, y, z):
    time.sleep(0.1234)
    return x * y * z;

f = fast(11, 22)
s = slow(11, 22, 33)
if f != 33:
    print('测试失败!')
elif s != 7986:
    print('测试失败!')
else:
    print('测试成功!')

>>> fast executed in 0.002998828887939453 ms
>>> slow executed in 0.12497758865356445 ms
>>> 测试成功!

参考:

https://www.bilibili.com/video/av25698102?from=search&seid=9430628394185842488

https://www.bilibili.com/video/av18511085/?p=25

文章最后发布于: 2019-02-16 20:53:14

相关阅读

python3基础(廖雪峰)

python2,3共存:第一节:python基本概念:Python交互模式,它的提示符是>>>基本命令:exit()python基本语言:1.          .py       

分享到:

栏目导航

推荐阅读

热门阅读