python基础知识
for循环本质
- 本质:
for循环本质上就是一个函数 - eg:
迭代取值与索引取值对比
- 迭代取值
优点:不依赖于索引的一种通用取值方式
缺点:取值的顺序永远都是固定的从左往右,无法重复获取值 - 索引取值
优点:可以重复取值
缺点:需要提供有序的容器类型才可以取值(不是一种通用的方式)
生成器对象
-
定义:
生成器其实就是自定义迭代器,定义阶段就是一个普通函数 -
eg
(当函数体内含有yield关键字,那么在第一次调用函数的时候,并不会执行函数体代码,而是将函数变成了生成器(迭代器))
调用函数:不执行函数体代码 而是转换为生成器(迭代器)
res = my_ge()
ret = res.next() # 每执行一个__next__代码往下运行到yield停止 返回后面的数据
print(ret)
ret = res.next() # 再次执行__next__接着上次停止的地方继续往后 遇到yield再停止
print(ret)
小题目
- 自定义range功能
多写多练
yield传值
并不会执行代码,而是转换成生成器
yield与return对比
- yield
1、可以当返回值(支持多个元素并组织成元组)
2、函数体代码在遇见yield是会停顿并不会结束
3、yield可以将函数变成生成器,也支持外界传值 - return
1、可以当返回值(支持多个元素并组织成元组)
2、函数替代码遇见return会直接结束
生成器表达式
- 1、生成器表达式内部的代码只有在迭代取值时才会执行
2、为了节省空间 - eg
最后打印出 [20, 21, 22, 23]