今日内容总结

  • 常见内置函数

  • 可迭代对象

  • for循环的内部原理

  • 异常处理

  • 异常处理的实操

  • 异常处理了解

  • for循环的本质

  • 迭代取值与索引取值的对比

 

常见内置函数

1.help()  查看注释信息
2.id() 返回一串相当于内存地址的数字
3.int() 类型转换 机制转换
4.isinstance() 判断数据类型
5.pow() 幂函数
6.round() 四舍五入
print(round(11.222,1)) # 第二个参数控制需要保留几位小数部分
7.sum() 求和

可迭代对象

1.什么叫迭代?
迭代其实就是更新换代 每一次迭代的过程都需要依赖上一次的结果
#单纯的循环,不是迭代
import time
while True:
print(666)
time.sleep(0.1)
#迭代
n = 1
while True:
print(n)
n +=1
#迭代取值
l1 = [11,22,33,44,55]
n = 0
while n < len(l1):
print(l1[n])
n +=1
2.什么是可迭代对象?
内置有__iter__方法的都可以称之为可迭代对象
'''__iter__该类代码的读法>>>:双下iter方法'''
3.那些数据是可迭代对象?
属于可迭代对象的有:
字符串 列表 字典 元组 集合 文件对象
可迭代对象其实就是为了后续迭代取值做准备
提供了不依赖于索引值的方法

迭代器对象

1.什么是迭代器对象?
可迭代对象调用__iter__方法之后生成的结果就是迭代器对象
2.迭代器对象的特征
含有__itre__方法和__next__方法
3.如何理解迭代器对象
通俗的理解就是实现了__next__这这个特殊方法的对象, 函数本身作用:可以迭代(挨个取元素),且它的返回值是聚合对象的元素,能够极大的节省存储空间
4.迭代器对象如何取值
调用__next__方法即可 如果取完了则会直接报错
'''有了迭代器对象才出现了针对字典和集合的迭代取值操作'''
5.迭代器对象补充说明
有很多双下可以省略写成英文
有一些迭代对象本身就是迭代器对象 例如:文件
迭代器对象调用iter()还是迭代器对象
迭代器取值要看迭代器是先调用还是本身就是

for循环内部原理

l1 = [1,2,3,4,5,6,7]
需求:不依赖for循环 完成对列表元素的取值
res = l1.__iter__()
n = 0
while n < len(l1):
print(res.__next())
n += 1
'''
for循环底层原理
for 变量名 in 可迭代对象:
循环体代码
1.会将in后面的数据调用__iter__()变成迭代器对象
为什么文件对象也可以for循环 ?
因为本身就是迭代器对象 再次调用不变
2.针对产生的迭代器对象依次调用__next__()方法迭代取值
3.当值取完之后 会自动处理报错并推出循环
'''
res = l1.__iter__()
while True:
pirnt(res.__next__())

异常处理

1.什么是异常?
代码运行出错之后就是异常 异常会导致程序立刻停止 是我们以后在编程过程中需要极力避免的情况(异常的外号>>>:bug)

2.异常信息的组成部分
1.line关键字所在的一行
用于提示你代码哪一行出错了 点击前面的蓝色字体可以直接定位
'''如果报错的信息很长 一般最后一个才是'''
2.NameError错误的类型
代码的报错也可以分为很多类型
3.name 'name' is not defined
具体的报错原因
3.异常的分类
1.语法异常
不被允许的 如果出现了必须立刻改正
2.逻辑异常
可以允许的 如果出现了尽快修改即可
4.异常的类型
  ZeroDivisionError——除(或取模)零 (所有数据类型)

  ValueError——传入无效的参数

  AssertionError——断言语句失败

  StopIteration——迭代器没有更多的值

  IndexError——序列中没有此索引(index)

  IndentationError——缩进错误

  OSError——输入/输出操作失败

  ImportError——导入模块/对象失败

  NameError——未声明/初始化对象 (没有属性)

  AttributeError——对象没有这个属性

  GeneratorExit——生成器(generator)发生异常来通知退出

  TypeError——对类型无效的操作

  KeyboardInterrupt——用户中断执行(通常是输入^C)

  OverflowError——数值运算超出最大限制

  FloatingPointError——浮点计算错误

  BaseException——所有异常的基类

  SystemExit——解释器请求退出

  Exception——常规错误的基类

  StandardError——所有的内建标准异常的基类

  ArithmeticError——所有数值计算错误的基类

  EOFError——没有内建输入,到达EOF 标记

  EnvironmentError——操作系统错误的基类

  WindowsError——系统调用失败

  LookupError——无效数据查询的基类

  KeyError——映射中没有这个键

  MemoryError——内存溢出错误(对于Python 解释器不是致命的)

  UnboundLocalError——访问未初始化的本地变量

  ReferenceError——弱引用(Weak reference)试图访问已经垃圾回收了的对象

  RuntimeError——一般的运行时错误

  NotImplementedError——尚未实现的方法

  SyntaxError Python——语法错误

  TabError——Tab 和空格混用

  SystemError——一般的解释器系统错误

  UnicodeError——Unicode 相关的错误

  UnicodeDecodeError——Unicode 解码时的错误

  UnicodeEncodeError——Unicode 编码时错误

  UnicodeTranslateError——Unicode 转换时错误

  以下为警告类型

  Warning——警告的基类

  DeprecationWarning——关于被弃用的特征的警告

  FutureWarning——关于构造将来语义会有改变的警告

  OverflowWarning——旧的关于自动提升为长整型(long)的警告

  PendingDeprecationWarning——关于特性将会被废弃的警告

  RuntimeWarning——可疑的运行时行为(runtime behavior)的警告

  SyntaxWarning——可疑的语法的警告

  UserWarning——用户代码生成的警告

异常处理实操

正常情况下代码出错 肯定是直接导致程序停止 但也可以自己通过代码来处理 从而避免程序的停止

基本语法结构
try:
可能会出错的代码
except 错误的类型1 as e: # e指代的就是错误的提示信息
针对性的处理措施
except 错误的类型2 as e:
针对性的处理措施
...

错误类型
很多时候可能自己都不知道会报什么类型的错误
'''万能异常:常见的报错都可以照单全收'''
try:
可能会出错的代码
except Exception as e:
统一的处理措施

异常处理使用准则:
1.被检测的代码越少越好
2.能尽量少用就是尽量少用

异常处理了解

1.结合else使用
当try检测的代码没有发生异常 正常运行完毕之后执行else的子代码
try:
可能会出错的代码
except Exception as e:
统一的处理措施
else:
可能会出错的代码没有出错 最后走else子代码
2.结合finally使用
无论try检测的代码是否有异常 最后都会执行finally子代码
try:
name
except Exception as e:
print(e)
finally:
无论try检测的代码是否有异常 最后都会执行finally子代码
3.全部整合到一起使用
try:
name
except Exception as e:
print(e)
else:
print()
finally:
print()
4.断言
name = 'faker'
assert isinstance(name,str)
5.主动报错
raise NameError()
'''由于是主动报错 所有可以非常明确的知道错误的类型'''

for循环的本质

#利用while与异常捕获 实现for循环的功能
info = {'name':'faker','age':28,'champion':3}
#先转换成迭代器对象
res = info.__iter__()
res = iter(info)
#迭代取值
while True:
#prnit(res.__next__())
try:
print(next(res))
except StopIteration as e:
break

迭代取值与索引取值的对比

1.索引取值
优势:可以反复获取相同的元素 并且没有固定方向
劣势:只能支持有序的容器类型 无序的无法取值兼容性没有迭代取值高

2.迭代取值
优势:兼容所有的容器容器类型
劣势:取值的顺序永远都是从左往右 并且无法重复获取 去完就完了
'''迭代器里面的东西是固定的 每取一个就会少一个 取完就空了'''


 

 posted on 2022-03-23 23:00  鳗鱼的春天  阅读(191)  评论(0编辑  收藏  举报