python之路——13
王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594
复习
1.函数
1.函数的定义和调用
2.参数及传递顺序
形参角度: 位置参数;*args;默认参数;**kwargs
实参角度: 按位置传,按关键字传
3.返回值:0/1/多个
4.闭包函数——内部函数引用外部函数变量
2.装饰器
1.作用:不改变函数调用方式的情况下,在函数前后增加功能
2.原则:开放(扩展)封闭(修改)原则
3.from functools import wraps
@wraps(func)
4.带参数的装饰器
学习内容
1.迭代器
[]--可迭代对象 [].__iter__()--迭代器
1.可迭代对象:list,dic,set,tuple,f = open(),str,range(),enumerate
2.可以被for循环的数据类型,都拥有_iter_方法
3.含有__iter__方法的都是可迭代的——可迭代协议
4.迭代器协议——内部含有__next__和__iter__方法的就是迭代器
5.可迭代的.__iter__()方法就可以得到一个迭代器
6.迭代器中的__next__()方法可以一个一个的获取值
2.使用情况:
函数返回:
1.iterator
2.可迭代对象
3.直接返回内存地址
3.优点
1.从容器类型中逐一取值,所有值
2.节省内存空间 range(100000) 不直接在内存中生成数——随循环或者next逐一生成
文件句柄——可迭代,
4.生成器
生成器函数
代码区
''' # 所有关于列表的操作 print(dir([])) # 双下方法 print([1].__add__([2])) print([1]+[2]) # python解释器内部通过调用add计算 print('_iter_' in dir(int)) # in l = [1,2,3] print(l.__iter__().__next__()) iterator = l.__iter__() print(iterator) ''' # for 循环内部 ''' l = [1,2,3] for i in l: print(i) #1. iterator = l.__iter__() #2. iterator.__next__() # range 函数 # print(range(1000)) # print(list(range(1000))) ''' # 生成器函数 ''' def generator(): print(1) print(2) yield 'a' print(3) yield 'b' g = generator() for i in g: print(i) # ret = g.__next__() # ret = g.__next__() ''' # 生成器可以随时连续取值 ''' def wahaha(): for i in range(2000000): yield '娃哈哈%s'%i g = wahaha() count = 0 for i in g: count += 1 print(i) if count >50: break print('****',g.__next__()) count = 0 for i in g: count += 1 print(i) if count >50: break ''' # 监视文件输入 def tail(filename): f = open('log',encoding='utf-8') while True: line = f.readline() if line.strip(): yield line.strip() g = tail('file') for i in g: if 'python' in i: print('***',i)