本节目录:
1、生成器
1.1 列表推导式方法 1.2 函数法--适用复杂的推导方法2、迭代器3、装饰器 3.1 单一验证方式(调用不传参数) 3.2 单一验证方式(调用传参数) 3.3 多种验证方式
1、生成器
1.1 列表推导式方法data = [1,2,3]data = (i*2 for i in data)print(data)print(data.__next__())print(data.__next__())print(data.__next__())1.2 函数法--适用复杂的推导方法
def fib(num):count = 0a,b = 0,1while count < num:
tmp = aa = bb = a + tmp#print(a)count += 1yield aprint("done.......")num = int(input("num>>:")) #输入打印的数据数量
f = fib(num)for i in range(num):print(f.__next__())****************************************************函数中:
return a 返回a,并结束函数 yield a 返回a,并挂起函数;返回给了通过__next__()调用函数的人;代表通过yield实现函数的中断,并且保存了函数执行的中间状态。模拟并发:
import timedef consumer(name):print("%s准备吃包子"% name)while True:baozi = yieldprint("包子[%s]来了,被[%s]吃了"% (baozi,name))def producer(name):
c1 = consumer("A")c2 = consumer("B")c1.__next__()
c2.__next__()print("%s做包子"% name)for i in range(5):time.sleep(1)print("做2个包子")c1.send(i+1)c2.send(i+1)producer("tom")
****************************************************2、迭代器
可以被next()函数调用并不断返回一个值得对象成为迭代器生成器都是迭代器>>>生成器是带有next方法的仅能迭代一次的迭代器迭代器不全是生成器由iter生成的对象是迭代器,也可以说是生成器
(1)、iter独立生成迭代器,这种角度可以说迭代器和生成器不一样(2)、iter底层也是由生成器的方法生成的迭代器,这种角度可以说迭代器和生成器一样range函数优化
py2直接生成对应的列表py3生成对应的生成器****************************************************
3、装饰器高阶函数 嵌套函数 -->给原代码增加新功能,但是不改变原代码作用:完全符合 开放、封闭原则--不改变原代码、调用方式,实现功能扩展3.1 单一验证方式(调用不传参数)
user_status = Falsedef login(func):
def inner():
_username = 'zs'_passwd = '123'global user_statusif user_status == False:
username = input("user>>:")passwd = input("pw>>:")if username == _username and passwd == _passwd:print("welcome!")user_status = Trueelse:print("wrong username or passwd")if user_status:func()return innerdef home():
print("首页")@logindef america():#login()print("美国")@logindef japan():#login()print("日本")def china():
print("中国")home()
#america = login(america)america()#japan = login(japan)japan()china() 3.2 单一验证方式(调用传参数) user_status = Falsedef login(func):
def inner(*args,**kwargs):
_username = 'zs'_passwd = '123'global user_statusif user_status == False:
username = input("user>>:")passwd = input("pw>>:")if username == _username and passwd == _passwd:print("welcome!")user_status = Trueelse:print("wrong username or passwd")if user_status:func(*args,**kwargs)return innerdef home():
print("首页")@login
def america(stype):print(stype)print("美国")def japan():
print("日本")def china():
print("中国")home()
america('america')japan('japan')china()3.3 多种验证方式
user_status = Falsedef login(stype):
def outer(func):def inner(*args,**kwargs):if stype == 'qq':_username = 'zs'_passwd = '123'global user_statusif user_status == False:
username = input("user>>:")passwd = input("pw>>:")if username == _username and passwd == _passwd:print("welcome!")user_status = Trueelse:print("wrong username or passwd")if user_status:func(*args,**kwargs)else:print("仅支持QQ验证")return innerreturn outerdef home():
print("首页")@login('qq')
def america(stype):print(stype)print("美国")@login('weixin')
def japan():print("日本")def china():
print("中国")home()
america('america')japan('japan')china()