Day12 生成器,列表推导式,生成器表达式,内置函数
昨日内容回顾
-
可迭代对象:
- 可以更新迭代的实实在在的值
- 判断方法:内部含有
__iter__方法 就是可迭代对象 - str list tuple dict range ret
- 优点:操作方法多,操作灵活,直观
- 缺点:占用内存
-
迭代器:
- 可以更新迭代的一个工具(数据结构)。
- 判断方法:内部含有
__iter__并且含有__next__方法的就是迭代器 - 文件句柄
- 优点:节省内存。惰性机制(只有调用才有值)
- 缺点:不直观。速度相对较慢,操作方法比较单一,不走回头路
-
格式化输出
-
函数名的应用
函数名相当于一个特数的变量,所以函数名具有变量的特性
-
默认参数可变的数据(坑)。作用域的(坑)
今日内容
-
生成器:
-
生成器:python社区,生成器与迭代器看成一种。生成器的本质就是迭代器。
-
生成器和迭代器的区别:生成器是我们自己用python代码构建的数据结构。迭代器都是提供的,或者是转化的来的
-
获取生成器的三种方式:
- 生成器函数
- 生成器表达式
- python内部提供的一些。
-
生成器函数获取一个生成器。
-
yield
# 函数 def func(): print(111) print(222) return 333 func() # 生成器 def func(): print(111) print(222) yield 3 yield 4 ret = func() print(ret) print(next(ret)) -
yield 和 return 区别:
- return : 函数中只存在一个return结束函数,并且给函数的执行者返回值
- yield :只要函数中有yield,那么他就是生成器函数而不是函数了;
- 生成器函数中可以存在多个yield ,yield不会结束函数,一个yield 对应一个next
-
例子:
# 吃包子案例 # 普通方法 def gen_func(): l1 = [] for i in range(1,5001): l1.append(f'{i} of baozi') return l1 print(gen_func()) # 普通方法,直接产生在内存中 # 使用生成器的方法 def gen_func(): for i in range(1,5001): yield f'{i} of baozi' ret = gen_func() for i in range(1,201): print(next(ret))
-
-
生成器表达式,列表推导式
-
定义:用一行代码构建一个比较有规律的列表
-
列表推导式:
- 循环模式:[变量(加工后的变量) for i in iterable]
- 筛选模式:[变量 (加工后的变量)for i in iterable if 条件]
-
例子:
# 将10以内所有整数的平方写入列表: # 普通方法: l1 = [] for i in range(1,11): l1.append(i**2) print(l1) # 列表推导式: print([i**2 for i in range(1,11)]) # 100以内所有的偶数写入列表 # 普通方法 l1 = [] for i in range(2,101,2): l1.append(i) print(l1) # 列表推导式 print([i for i in range(2,101,2)]) # 筛选模式 # 30 以内能被3整除的数 # 普通方法 l1 = [] for i in range(1,31): if i % 3 == 0: l1.append(i) print(l1) # 列表推导式 print([i for i in range(1,31) if i % 3 == 0])
-
-
内置函数:
- eval函数 exec函数 处理数据流
- hash函数:获取哈希值
- callable函数:判断是否可以被调用
今日总结
- 生成器
- 生成器函数 yield
- yield 和 return 的区别,yield from
- 列表推导式
- 生成器表达式
- 内置函数
浙公网安备 33010602011771号