#昨日复习 #迭代器 #可迭代协议——含有iter方法都是可迭代对象 #迭代器协议——含有iter和next方法都是迭代器 #特点: #节省内存空间 #方便逐个取值,但一个可迭代对象只能遍历一次 #生成器——本质就是自己写的迭代器 #生成器函数 #含有yield关键字的函数都是生成器函数 #特点: #调用之后函数内部代码不执行,返回一个生成器 #每次从生成器中取一个值就会执行一段代码,遇到yield关键字就停止 #取值方式: #for:如果没有break就会遍历完该生成器 #next:每次之取一个值 #send:不能用在第一个,在取值的同时传一个参数在取值的位置 #数据类型强制转换:会一次性把值读到内存中 #生成器表达式 #(符合条件要放在生成器中的值 for i in 可迭代对象 for 条件) # # 3.处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕 # def check_file(filename, aim): # with open(filename, encoding='utf-8') as f: # for i in f: # 文件句柄循环 # if aim in i: # yield i # # # g = check_file('测试文件', 'python') # for i in g: # print(i.strip()) # # # # 4.写生成器,从文件中读取内容,在每一次读取到的内容之前加上‘***’之后再返回给用户。 # def check_file(filename): # with open(filename, encoding='utf-8') as f: # for i in f: # 文件句柄循环 # yield '***'+i.strip() # # g = check_file('测试文件') # for i in g: # print(i) # 面试题讲解 # def demo(): # for i in range(4): # yield i # # g = demo() # # g1 =(i for i in g) # g2 =(i for i in g1) # print(list(g1)) #[0, 1, 2, 3] # print(list(g2)) #[]一个生成器只能遍历一次 # def add(n,i): # return n + i # # def text(): # for i in range(4): # yield i # # g = text() # # for n in [1,10]: #遇到for加生成器就打散 # # g = (add(n,i) for i in g) # n = 1 # g = (add(n,i) for i in g)#1,2,3,4 # n = 10 # g = (add(n,i) for i in (add(n,i) for i in text())) # print(list(g)) #调用时才执行生成器 #内置函数 #如果某个方法属于某个数据类型,就用点调用 #否则就是内置函数和自定义函数 #作用域 # print(locals()) #返回本地作用域中所有的名字 # print(globals()) #返回全局作用域中所有的名字 #迭代器 #迭代器.__next__() = next(迭代器) #可迭代对象.__iter__()=iter(可迭代对象) #range()是一个可迭代对象,但不是一个迭代器 #其他 #dir()查看一个变量所拥有的方法 #help()查看帮助 #print()-->print(1,2,3,4,5,seq='\)可以指定分隔符 #变量 #callable查看是否是函数,返回布尔值 #文件操作 #open() #内存 #id() #hash() #字符串 #evil()执行字符串类型的代码,有返回值,有结果的简单运算 #exec()执行字符串类型的代码,无返回值,无结果的流程控制 #input()接受的是一个字符串 #计算 #round()小数精确 #pow()幂运算 #sum()求和 # min()最小值 # min()最大值