11-装饰器

函数

  函数名是函数的名字,本质是:变量,特殊的变量

  高阶函数:
    函数的接受参数是一个函数名
    函数的返回值是一个函数名
    满足上述任意以个条件都是高阶函数

  函数名(): 执行此函数。
    单独打印函数名就是内存地址。
    函数名可以作为容器类数据的元素
    函数名可以作为参数
    函数名可以作函数的返回值

 

 1 #定义一个新的函数
 2 def test():
 3     print("hello")
 4 
 5 test()
 6 函数是由
 7 def和函数名():
 8     函数体
 9 组成,函数通过函数名来进行调用,:的作用是为了将函数名和函数体区分开来。
10 
11 #函数的传参
12 
13 def func(*args):
14    print(*args) #(1,2,30,1,2,33.。。。。。)
15 l1 = [1,2,30]
16 l2= [1,2,33,21,45,66]
17 func(*l1,*l2)
18 
19 
20 #函数的嵌套
21 def test1():
22     print(8)
23     def test2():
24         def test3():
25             print(6)
26             return True
27         print(7)
28         test3()
29     test2()
30     print(1)
31 test1()
 1 def compare(a,b):
 2     if a > b:
 3         return a
 4     elif a == b:
 5         return ("一样大")
 6     else:
 7         return b
 8 
 9     # return a if a > b else b
10     # 三元运算
11 s = compare(6,6)
12 print(s)
13 #当函数之执行时遇到return时就直接返回值,不在执行return之后的语句
1 def test3(z,b):
2     print(z)
3     print(b)
4     return 1,2,3.4,4,5
5 当返回值为多个值的时候,这些元素会组合成一个元组
 

 

闭包


  就是内层函数对外层函数(非全局)变量的引用
  如何判断是否闭包:
    内层函数的名字.__closure__如果打印出cell则证明有闭包过程

  闭包用处:
    当函数开始执行时,如果当函数遇到闭包,他有一个机制,他会永远开辟一个内存空间,将闭包中的内存空间等值放入其中,不会随着函数的执行完毕而消失

    节省内存空间

 1 def wrapper(func):
 2     def inner(*args,**kwargs):
 3 
 4         print(func)
 5         print(inner.__closure__)
 6     return inner
 7 
 8 wrapper(6)()
 9 
10 
11 >>>6
12 >>>(<cell at 0x00000224785A6C78: int object at 0x000000005B8B53C0>, <cell at 0x00000224785A6CA8: function object at 0x000002247863E9D8>)

 


装饰器:


  本质就是函数,功能是为其他函数添加附属功能

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

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

 1 import time
 2 
 3 #装饰器
 4 def timmer(f):
 5     def ninner():
 6         start_time = time.time()
 7         time.sleep(3)
 8         f()
 9         end_time = time.time()
10         print("%s" %(end_time - start_time))
11     return ninner
12 
13 
14 #被装饰函数
15 @timmer   # test1 = timmer(test1)
16 def func22():
17 
18     print("hello world")
19 
20 
21 func22()

 

posted @ 2018-03-31 21:54  kuoiea  阅读(147)  评论(0)    收藏  举报