#昨日复习
#迭代器
#可迭代协议——含有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()最大值
![内置函数]()