新手小白 python之路 Day6 (装饰器、生成器、迭代器)
简单的整理了下装饰器、生成器、迭代器
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: linghanchujian import time # 装饰器 def fun(function): def funs(*args,**kwargs): Start_Time = time.time() res=function(*args,*kwargs) End_Time = time.time() print("run fun time is %s"%(End_Time-Start_Time)) return res return funs pass def func(): time.sleep(0.5) print("the is func!!") pass @fun # 相当于 func1 = fun(func1) def func1(name): func() time.sleep(0.5) print("the is func1!!",name) return 100 pass print(func1("Linghanchujian")) #实际上执行的是funs()这个函数 # 装饰器 def func3(isFunc): def func4(Func): def func5(*args,**kwargs): if isFunc: print("isFunc is True!!") res = Func(*args, **kwargs) else: print("isFunc is False!!") res = Func(*args, **kwargs) return res pass return func5 pass return func4 pass @func3(isFunc=True) def func(Name): print("the is func!! My name is %s"%Name) pass @func3(isFunc=False) def func1(Name,age): print("the is func1!! My name is %s and age is %s"%(Name,age)) pass func("Linghanchujian") func1("Linghanchujian",22) # 列表生成器 array = [i*2 for i in range(10)] # 会一次性生成所有列表数据 可以通过 array[i] 来取值 print(array[8]) array1 = (i*2 for i in range(10)) # 不会生成数据,只会创建地址保存算式 可以通过 __next__() 一个个取值 但是一般是用 for in for j,k in enumerate(array1): if j==8: print(k) break # 直接打印 def SeriseOne(Max): i,a,b,c = 0,0,1,0 while i<Max: print(b) c = a a = b b = c+a i += 1 pass SeriseOne(10) # 函数生成器 def SeriseTwo(Max): i,a,b = 0,0,1 while i<Max: yield b a,b = b,a+b i += 1 return "明天会更好" pass print(SeriseTwo(100)) Serise = SeriseTwo(10) while True: try: print(Serise.__next__()) except StopIteration as e: print("SeriseTwo 的返回值: %s"%e.value) break # 携程 (生成器并行效果) # 消费者 def comsume(name): print("%s 准备吃霸王餐!!!"%name) while True: res = yield print("霸王餐[%s]被[%s]吃了"%(res,name)) pass # 生产者 def producer(): print("开始生产霸王餐!!!") c = comsume("Linghan") c1 = comsume("Chujian") c.__next__() c1.__next__() for i in range(10): time.sleep(3) print("3秒生产二份霸王餐!!!") c.send(i) c1.send(i) pass producer() # 迭代器 # 可以直接作用于for循环的对象统称为可迭代对象: Iterable (如:list列表 str字符串 dict字典 tuple元祖 set集合) # 满足上述条件 并且可以被__next__() (注:2.x 为next())函数调用并且不断返回下一个值的对象称为迭代器:Iterator # isinstance() 判断是否为迭代器(如:isinstance(list,Iterator)) iter()可以将list str dict 变成迭代器 (如:iter(list))

浙公网安备 33010602011771号