python基础复习 11

  1 # def wrapper(func):
  2 #     def inner(*args,**kwargs):
  3 #         print('再被装饰之前要做的事')
  4 #         ret = func(*args,**kwargs)
  5 #         print('再被装饰之后要做的事')
  6 #         return ret
  7 #     return inner
  8 #
  9 # @wrapper
 10 # def holiday(day):
 11 #     print('全体放假%s天'%day)
 12 #     return '好开心!'
 13 
 14 # ret = holiday(8)
 15 # print(ret)
 16 
 17 
 18 # 练习题
 19 # 1,编写装饰器,为多个函数加上认证的功能(用户的账号和密码来
 20 # 源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
 21 # FLAG = False
 22 # def login(func):
 23 #     def inner(*args,**kwargs):
 24 #         global FLAG
 25 #         '''登录程序'''
 26 #         if FLAG:
 27 #             ret = func(*args, **kwargs)
 28 #             return ret
 29 #         else:
 30 #             username = input("username:")
 31 #             password = input("password:")
 32 #             if username == "zhizhu" and password == "123":
 33 #                 FLAG = True
 34 #                 ret = func(*args,**kwargs)
 35 #                 return ret
 36 #             else:
 37 #                 print("登录失败,请重新输入!")
 38 #     return inner
 39 #
 40 # @login
 41 # def shoplist_add():
 42 #     print('增加一件物品')
 43 #
 44 # @login
 45 # def shoplist_del():
 46 #     print('删除一件物品')
 47 #
 48 # shoplist_add()
 49 # shoplist_del()
 50 
 51 
 52 
 53 # 2.编写装饰器,为多个函数加上记录调用功能,要求每次调用函数
 54 # 都将 被调用的函数名称写入文件
 55 
 56 # def log(func):
 57 #     def inner(*args,**kwargs):
 58 #         with open('log','a',encoding='utf-8') as f:
 59 #             f.write(func.__name__+'\n')
 60 #         ret = func(*args,**kwargs)
 61 #         return ret
 62 #     return inner
 63 #
 64 # @log
 65 # def shoplist_add():
 66 #     print("增加一件物品")
 67 #
 68 # @log
 69 # def shoplist_del():
 70 #     print("删除一件物品")
 71 #
 72 # shoplist_add()
 73 # shoplist_del()
 74 
 75 
 76 # 如果你不需要用装饰器,如下实现
 77 # 在原有函数下再写一个函数,def timmer_out(flag): 进行判断
 78 # 如果是Ture,执行装饰器功能,False,不执行
 79 # import time
 80 # FLAGE = True
 81 # def timmer_out(flag):
 82 #     def timmer(func):
 83 #         def inner(*args,**kwargs):
 84 #             if flag:
 85 #                 start = time.time()
 86 #                 ret = func(*args,**kwargs)
 87 #                 end = time.time()
 88 #                 print(end-start)
 89 #                 return ret
 90 #             else:
 91 #                 ret = func(*args, **kwargs)
 92 #                 return ret
 93 #         return inner
 94 #     return timmer
 95 #
 96 # @timmer_out(FLAGE)  # 先执行timmer_out 返回timmer 传给了@timmer_out,也就是说现在的@timmer_out == @timmer
 97 # def wahaha():
 98 #     time.sleep(0.1)
 99 #     print('蜘蛛蜘蛛')
100 #
101 # @timmer_out(FLAGE)
102 # def niulanshan():
103 #     time.sleep(0.1)
104 #     print('老虎老虎')
105 # wahaha()
106 # niulanshan()
107 
108 
109 # 多个装饰器装饰同一个函数
110 """
111 1,先执行@wrapper2 func()之前的
112 2,在执行@wrapper1 func()之前的
113 3,在执行func()这个函数
114 4,在执行@wrapper1 func()之后的
115 5,在执行@wrapper2 func()之后的
116 
117 执行完的结果
118 wrapper2, before func
119 wrapper1, before func
120 in f
121 wrapper1, after func
122 wrapper2, arter func
123 """
124 # def wrapper1(func):
125 #     def inner1():
126 #         print('wrapper1, before func')
127 #         func()
128 #         print('wrapper1, after func')
129 #     return inner1
130 #
131 # def wrapper2(func):
132 #     def inner2():
133 #         print('wrapper2, before func')
134 #         func()
135 #         print('wrapper2, arter func')
136 #     return inner2
137 #
138 # @wrapper2
139 # @wrapper1
140 #
141 # def f():
142 #     print('in f')
143 #
144 # f()
145 
146 
147 
148 # 迭代器
149 # 迭代器的概念
150 # 只要含有 __iter__方法的都是可迭代的 --可迭代协议
151 # 迭代器的协议 -- 内部含有__next__和 __iter__方法的就是迭代器
152 
153 # 可以被for循环的都是可迭代的
154 # 可迭代的内部都有__iter__方法
155 # 只要是迭代器 一定可迭代
156 # 可迭代的.__iter__()方法就可以得到一个迭代器
157 # 迭代器中的__next__()方法可以一个一个的获取值
158 
159 # from collections import Iterable
160 # from collections import Iterator
161 # print(isinstance([],Iterator))     # isinstance 判断是否是可迭代对象
162 # print(isinstance([],Iterable))
163 
164 # 迭代器的好处:
165       # 从容器类型中一个一个的取值,会把所有的值都取到
166       # 节省内存空间
167          # 迭代器并不会在内存中再占用一大块内存
168          # 而是随着循环 每次生成一个
169          # 每次next 每次给我一个
170 
171 
172 # 生成器
173 # 生成器函数 --- 本质上就是我们自己写的函数
174 
175 # def generator():
176 #     print(1)
177 #     return 'a'
178 #
179 # ret = generator()
180 # print(ret)
181 
182 # 只要含有yield关键字的函数  都是生成器函数
183 # yield只能写在函数内部。
184 # yield 与 return 不能共用
185 # def generator():
186 #     print(1)
187 #     yield 'a'
188 
189 # ret = generator()
190 # print(ret)
191 # print(ret.__next__())
192 
193 
194 # def generator():
195 #     print(1)
196 #     yield 'a'
197 #     print(2)
198 #     yield 'b'
199 # g = generator()
200 # ret = g.__next__()
201 # print(ret)
202 
203 # 注:本文是根据老男孩课程内容整理而成的,本文仅供个人笔记使用,如果有侵犯,请联系我,我立即撤销。

 

posted @ 2019-01-03 09:16  牧羊世界  阅读(147)  评论(0编辑  收藏  举报