迭代
总括:一些可用for遍历的数据类型有哪些,应该回答:统称为可迭代对象,或可以实现迭代器协议的对象,都支持for遍历/循环
列表、元组、字典遍历
遍历文件
迭代概论
python内部为什么可以迭代?
1 可以迭代的对象,能够使用for遍历,即可迭代对象支持迭代协议,实现迭代协议的特点是:内部有个
_next_()方法,它可以用来移动指针到下一个元素,即可关联到下一个元素,此时也可以用全局的 next方法。
2 对于文件本身Python已经内部实现了next方法了。而对于列表Python并没有实现next方法,但还可以用for遍历,是因为用for遍历时,Python为for这个遍历自动加上了next方法了,因此列表也称为可迭代对象。
实现迭代的工具
for 推导 内置的map函数
迭代分类
**迭代器对象:**如文件,已经内部帮我们实现了next方法了。
**可迭代对象:**如列表,这类尽管也可用for,推导等迭代工具遍历,因为用迭代工具时,自动加上了iter方法,即会生成一个_iter_()方法,这个_iter_()方法又帮助我们会生成了_next_()方法了。
但两种本质不变,想要实现迭代,即必须实现迭代协议,即要有_next_()方法。
判断对象是否实现_iter_()方法
列表本身未实现iter方法,要想遍历必须手工实现iter方法,或者通过for循环会自动帮我们实现iter方法,从而实现next方法。
不通过for,手工实现列表遍历。
总之:Python之所以不帮助我们把列表内部也实现iter方法,是因为列表可大可小,里面可以嵌套字典、元组等结构复杂,所以列表本身并不是一个迭代器对象。
记住:虽然看到序列都可用for遍历,但有区别:有的对象本身已具备next方法,而有些是因为用了for后,通过for自动加的iter方法,从而有next方法实现了遍历。
实例
1手工实现元素平方
2 for实现元素平方
3 推导实现元素平方
字典的遍历
推导实例
内置可迭代对象
range
range与for
range与推导
判断range本身是否为迭代器
range本身不拥有iter方法
zip负责将2个集合合成一个集合
例如列表:
map
注:可以用于将一个列表中的元素,依次执行操作后返回。
filter函数过滤
for while python内置函数,实际中根据执行效率可进行选择
函数
函数引入
注:有些语句是批量执行,将重复执行的一些语句封装成函数,形成一个函数整体,而到底是函数还是方法,看它是否依附于某一个对象。
函数定义
函数调用
为什么要用函数
1 最大化代码重用
2 最小化代码冗余
3 过程分解
外界传入参数给函数
函数传参数到外面
函数多态特性
变量的作用域
1 Built-in作用范围最高,即内置函数写好的函数,如:len,他们的变量的作用域最高
2 Global 全局作用域次之。
3 封装类的作用域,即函数套函数类型
4local 局部变量作用域
例子:
1 未声明global时,函数外的x都是全局x=55,除非函数中的x=99
2函数内声明global时的情况
3 函数套函数
加nonlocal x对封装的变量可以改变
内置函数自定义函数
函数参数
不可变类型
实际若传的是不可变类型,如:int型,浮点型,字符串,元组,则直接传的是副本给函数,所以执行完函数并不影响原始值。
例如:结果为 5, 5
加上return,结果仍为 5, 5
赋值了,结果肯定为 5, 15,即变了
可变类型
如,列表。传的是地址引用,所以经过函数操作,可能会影响原始值。
我们可以通过人为创造出列表副本,将列表副本传进函数进去,此时即不影响原始列表了。