今日学习目标:
- 学习迭代,异常处理,for循环的本质
- 了解常见内置函数
今日学习内容:
内容简要:
- 迭代对象与迭代器
- for循环的内部原理
- 异常处理
- 常见内置函数(续)
内容详细:
迭代对象与迭代器
-
什么叫迭代?
迭代其实就是更新换代 每一次迭代的过程都需要依赖于上一次的结果
-
什么是可迭代对象?
内置有__iter__方法的都可以称之为是可迭代对象。如:
-
哪些数据是可迭代对象?
通过上述方式验证得到:数据种类 是否是可迭代对象 整型 否 浮点型 否 字符串 是 列表 是 字典 是 元组 是 集合 是 布尔值 否 文件 是 普通函数 否
可迭代对象其实就是为了后续迭代取值做准备提供了不依赖于索引取值的方式
# 迭代取值
l1 = [11, 22, 33, 44, 55]
n = 0
while n < len(l1):
print(l1[n])
n += 1
迭代取值与索引取值的对比
-
索引取值
优势:可以反复获取相同的元素 并且没有固定的方向
劣势:只能支持有序的容器类型 无序的无法取值兼容性没有迭代取值高 -
迭代取值
优势:兼容所有的容器类型
劣势:取值的顺序永远都是从左往右 并且无法重复获取 去完就完了
-
迭代器里面的东西是固定的 没取一个就会少一个 去完就空了,所以一般都是for循环代替
-
什么是迭代器对象?
可迭代对象调用__iter__方法之后生成的结果就是迭代器对象
-
迭代器对象的特征
含有__iter__方法和__next__方法(类似可迭代对象)
-
迭代器对象作用
迭代器对象能够极大的节省存储空间。
它的出现类似于银行在我们社会中的出现,银行对我们个人简单的储存功能就是迭代器对象对数据作用一样。你原本有多少钱它还是在银行里有多少,想用多少取多少,节省了自己之前在家里的钱库的空间。 -
迭代器对象如何取值
调用__next__方法即可 如果取完了则会直接报错!!!
补充:
- __ iter__ , __ next__ 这两种方法有简便写法 iter() ,next()。
- 有一些可迭代对象本身也是迭代器对象>>>:文件对象。
- 可迭代对象调用一次__iter__方法编程迭代器对象 如果继续调用 结果还是迭代器对象本身。
s = 'jason' # 4.迭代取值的要求 print(s.__iter__().__next__()) # j 每次先产生一个新的迭代器对象然后取值 print(s.__iter__().__next__()) # j 每次先产生一个新的迭代器对象然后取值 print(s.__iter__().__next__()) # j 每次先产生一个新的迭代器对象然后取值 print(s.__iter__().__next__()) # j 每次先产生一个新的迭代器对象然后取值 res = s.__iter__() # 已经变成迭代器对象了 print(res.__iter__().__next__()) # j 之后再调用还是自身 print(res.__iter__().__next__()) # a print(res.__iter__().__next__()) # s print(res.__iter__().__next__()) # o
for循环的内部原理
-
for循环的原理
引子:
不使用简单的for循环 完成对列表元素的取值l1 = [1, 2, 3, 4] res = l1.__iter__() n = 0 while n < len(l1): print(res.__next__()) n += 1
此时就可以看出上述方法是上文的迭代对象,迭代器对象的知识点
for循环底层原理
''' for 变量名 in 可迭代对象: 循环体代码 # 1.会将in后面的数据调用__iter__()变成迭代器对象为什么文件对象也可以for循环 因为本身就是迭代器对象 再次调用不变 # 2.针对产生的迭代器对象依次调用__next__()方法迭代取值 # 3.当值取完之后 会自动处理报错并退出循环 '''
异常处理
-
什么是异常?
代码运行出错之后就是异常 异常会导致程序立刻停止
是我们以后在编程过程中需要极力避免的情况(异常的外号>>>:bug) -
异常信息的组成部分
- line关键字所在的一行
用于提示你代码哪一行出错了 点击前面的蓝色字体可以直接定位-(如果报错的信息很长 一般最后一个才是) - NameError错误的类型
代码的报错也可以分为很多类型 - name ‘name’ is not defined
具体的报错原因(就是解决报错的答案)
- line关键字所在的一行
-
异常的分类
1.语法异常:不被允许的 如果出现了必须立刻改正
2.逻辑异常:可以允许的 如果出现了尽快修改即可Python中常见的异常类型
错误的类型 详情 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类) ;代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它 ValueError 传入一个调用者不期望的值,即使值的类型是正确的 -
Python中的异常处理方法
正常情况下代码出错 肯定是直接导致程序停止
但是也可以自己通过代码来处理 从而避免程序的停止try: 可能出现异常的代码块 except 错误的类型 as e: print("异常的类型是:%s"%type(e)) print("异常的内容是:%s"%e) else: print('如果代码块不抛出异常会执行此行代码!') finally: print('不管代码块是否抛出异常都会执行此行代码!')
异常处理使用尊则
- 被检测的代码越少越好
- 能尽量少用就尽量少用
常见内置函数(续)
名称 | 作用 |
---|---|
help() | 查看注释信息 |
id() | 返回一串相当于内存地址的数字 |
isinstance() | 判断数据类型 |
pow() | 幂指数 |
round() | 四舍五入、如:round(11, 1)第二个参数控制需要保留几位小数部分 |
sum() | 数据求和 |
更多方法了解请参考Python 内置函数
今日学习时间:
这里统计计划学习的时间
1、 上午8:30~12:30
2、 下午2:30~5:30
3、 晚上6:30~9:30
今日学习产出:
这里统计学习计划的总量
- 1、 技术笔记 1遍
- 2、CSDN 技术博客 1篇
- 3、每日录音,预习明日内容