day12——闭包,装饰器,迭代器

1,函数名的应用(第一类对象)
函数名就是变量名,函数名的命名规范和变量一样
直接打印函数名不加括号就是打印函数的内存地址
函数名可以作为参数传递给参数

闭包
  内层函数中访问外层函数的变量
作用:
1,保护自己的变量不受侵害,变量不对外开放
2,可以让一个变量常驻内存
写法:
def outer():
a = 10
def inner():
print(a)
return inner

查看函数是否是闭包:
__closure__ 打印出来是None就不是闭包,打印出来东西了就是闭包


装饰器
# import time
# def func1():#6,执行func1函数
#     print('in func1')#7,打印这里
# def timer(func):#2,执行timer函数   func== func1
#     def inner():#5执行inner函数
#         start = time.time()
#         func()   #5,看第二步,func() == func1(),调用func1
#         print(time.time() - start) #8,继续执行这里,游戏结束
#     return inner#3,返回inner给调用者
#
# func1 = timer(func1)#1,调用timer()函数,func1传给func
# func1()#4,接收返回的inner  func1() == inner()  调用inner

 


语法糖
# import time
# def timer(func):#  2执行timer函数  func== func1
#     def inner():    # 5,执行inner函数
#         start = time.time()
#         func()      #6,func()==func1()调用func1
#         print(time.time() - start)#9,打印
#     return inner#3,返回inner---func1 == inner
#
# @timer   #1,func1 = timer(func1)调用timer函数,传参
# def func1():#7,执行func1函数
#     print('in func1') ##--8 打印
#
# func1()  # 4,func1()==inner()调用inner函数

 



带参数的装饰器
# import time
# def timer(func):   # 2,func = func1
#     def inner(a):# 5,inner(1)
#         start = time.time()
#         func(a)#6,func(1)== func1(1)调用func1函数
#         print(time.time()-start)# 8,打印这里
#     return inner #3,返回inner   func1 = inner
#
# @timer  # 1,func1 == timer(func1)
# def func1(a):
#     print(a)#7,打印print(1)
# func1(1) #4,func1(1) == inner(1)

 


***装饰器——成功hold住所有函数传参
# import time
# def timer(func):   #2 ,func == func1    /    6, func == func2
#     def inner(*args,**kwargs):
#         start = time.time()
#         re = func(*args,**kwargs)  #10,func()==func1()调用 / 15,func()== func2()调用
#         print(time.time() - start)#12  打印时间  /  18  打印时间
#         return re   #13 返回re     /19 返回re
#     return inner  # 3,inner == func1   7, inner == func2
# @timer   # 1,func1 == timer(func1)             /  4, func1 == inner
# def func1(a,b):
#     print('in func1')#11,打印
# @timer  # 5,func2 == timer(func2)      /  8, func2 == inner
# def func2(a):
#     print('in func2 and get a:%s'%(a)) #16 打印
#     return 'func2 over'#17,返回‘fun2 over’给最后一行调用者
#
# func1('aaaaa','bbbbb')   #9,func1() == inner()调用inner函数
# print(func2('aaaaa'))

 

posted @ 2018-08-15 20:07  小白——楠  阅读(180)  评论(0编辑  收藏  举报