Python学习之装饰器

http://www.cnblogs.com/linhaifeng/articles/6140395.html

装饰器:本质就是函数,功能是为其他函数添加附加功能
原则:1.不修改被修饰函数源代码
           2.不修改被修饰函数的调用方式

装饰器=高阶函数+函数嵌套+闭包

闭包:在一个作用域里放入定义变量,相当于打了一个包

高阶函数定义:
1.函数接收的参数是一个函数名

2.函数的返回值是一个函数名

3.满足上述条件任意一个,都可称之为高阶函数

装饰器的基本框架:

 1 import time
 2 def timmer(func):
 3     def wrapper():
 4         print(func)
 5         func()
 6     return wrapper
 7 
 8 def test():
 9     time.sleep(0.5)           #为了看执行效果引入time延时
10     print('test函数运行完毕')
11 
12 test()
13 res=timmer(test)  #返回的是wrapper的地址
14 res()             #执行的是wrapper()
15 
16 test=timmer(test)  #返回的是wrapper的地址
17 test()             #执行的是wrapper()
18 输出:
19 test函数运行完毕
20 <function test at 0x0000008305B24158>
21 test函数运行完毕
22 <function test at 0x0000008305B24158>
23 test函数运行完毕
简单示例
 #这就是一个实现一个装饰器最基本的架子
 def timmer(func): 
    def wrapper():
        print(func)
        func()
       
    return wrapper 
加上参数:
1 def timer(func):
2     def wrapper(*args,**kwargs):
3         func(*args,**kwargs)
4     return wrapper

加上功能:
import time
def timer(func):
    def wrapper(*args,**kwargs):
        start_time=time.time()
        func(*args,**kwargs)
        stop_time=time.time()
        print('函数[%s],运行时间是[%s]' %(func,stop_time-start_time))
    return wrapper
加上返回值:
import time
def timer(func):
    def wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print('函数[%s],运行时间是[%s]' %(func,stop_time-start_time))
        return res
    return wrapper
使用装饰器:
def cal(array):
    res=0
    for i in array:
        res+=i
    return res

cal=timer(cal)
cal(range(10))
语法糖@:
@timer  #@timer就等同于cal=timer(cal)
def cal(array):
    res=0
    for i in array:
        res+=i
    return res

cal(range(10))

 Python两个变量的值进行交换的方法

'''这是第一种赋值方法,采用第三方变量'''
c = a
a = b
b = c

'''使用两个变量'''
a = a+b   #取两个数的和
b = a-b   #然后a-b等于a然后赋值给b
a = a-b   #然后a-b等于b然后赋值给a,完成值的交换

使用两个变量的另一种方法:
a,b = b,a

  

 

 

posted @ 2018-07-17 11:40  一只小妖  阅读(98)  评论(0)    收藏  举报