python基础第五天迭代与函数

迭代

总括:一些可用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,即变了
在这里插入图片描述

可变类型

如,列表。传的是地址引用,所以经过函数操作,可能会影响原始值。
在这里插入图片描述
我们可以通过人为创造出列表副本,将列表副本传进函数进去,此时即不影响原始列表了。
在这里插入图片描述

发布了30 篇原创文章 · 获赞 0 · 访问量 402

猜你喜欢

转载自blog.csdn.net/qq_43498494/article/details/103638645