迭代器:
a=iter([1,2,456,486,456,486,456,7489,78,456,789,456,789,\ #输入一次取一个元素,输入0退出 4,5,52,45,45,12,23,56,9,89,56,56,5,5,6,56,56,4,5,98,\ 121,12,12,121,21,21,21,21,21,54,54,8,7,54,6,546,898,6,\ 4,54,85,45,45,]) while True: b=input("") if b=="0": break else: print(a.__next__())
生成器
#生成器,特殊的函数,返回的是一个迭代器,可以随意暂停与继续
# def obj(a):
# while a>0:
# a-=100
# print("chenggong")
# yield 100
# b=obj(500)
# print(b.__next__())
# print(b.__next__())
#用yield实现单线程中的异步并发效果
# import time
# def chi(name):
# print("我%s要吃包子"%(name))
# while True:
# baozi=yield #用于接收下一个函数send的值,并运行下一句
# print("包子%s来了,被%s吃了"%(baozi,name))
# def zuo(name):
# c1=chi("A")
# c2=chi("B")
# c3=chi("C")
# c1.__next__()
# c2.__next__()
# c3.__next__() #定义三个函数,然后每个next一下
# print("%s开始做包子"%name)
# for i in range(5): #循环5次
# time.sleep(2) #延时
# print("两个包子好了")
# c1.send(i)
# c2.send(i)
# c3.send(i) #分别给每个函数发送一个i
# zuo("liu")
装饰器
# #装饰器的用法
# def login(func): #开放封闭,不改变函数b,c,给他们加了扩展login
# def inner(arg):
# print("dfsdf")
# func(arg)
# return inner
# @login #装饰器
# def b(a):
# print("dfvc%svc"%a)
# @login
# def c(a):
# print("1123423c%svc"%a)
# # c=login(c) #装饰器原理
# c("dfd") #因为有装饰器,执行函数c时,inner等于c,执行函数b时,inner等于b
# b("121212")
#可以加参数的装饰器 def o(): print("sdfd") def p(): print("543534") def filter(aaa,bbb): def obj(func): def inner(): aaa() func() bbb() return inner return obj @filter(o,p) #filter=filter(filter(o,p))>>>@obj>>a=obj(a) def a(): print("1") a()