常见内置函数补充与迭代器认知

一.常见内置函数补充

1.help() 查看注释信息

hele(len) #len(obj, /)

2.id() 可查看内存地址(返回的是数字)

print(id('thn')) #31105520

3.int() 整型类型转换 进制转换

4.isinstance() 判断数据类型

print(isinstance('thn', str)  srt字符串 返回True
print(isinstance(123, str))  不是字符串  返False

5.pow() 幂指数(次方)

print(pow(10,2)) #100

6.round() 四舍五入

print(round(50.333, 0)) #  50  
print(round(50.333, 1)) #  50.3
print(round(50.333, 2)) #  50.33

7.sun() 求和

print(sum([50, 50, 20, 10, 10, 20]))  # 160

二.迭代器可迭代对象

"""迭代器就像更新换代一样,每次更新都基于上次更新后的结果"""
1迭代取值(相同于for循环取值)

2.迭代对象
"""在内资方法里有__iter__的方法称为可迭代对象"""
也可用(.)的方式查询
3.那些数据属于可迭代对象
"""基于for循环内还有一个文件对象也支持for循环"""
"""字典,列表,元组,集合,字符串,文件对象其实就是另一种所引取值方式"""

三.迭代器对象

1.迭代器对象:可迭代对象调用__iter__方法之后生成的结果就是迭代器对象
2.迭代器对象特征:含有__iter__方法和__next__方法
3.迭代器对象如何取值:__next__方法 取完就报错。for循环其实就是一种不需要索引取值的方式底层就是迭代器对象
4.可迭代对象调用依次__iter__方法编程迭代器对象 如果继续调用__next__结果还会是迭代器对象本身

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

1.索引取值
	优势:可以反复获取相同的元素 并且没有固定的方向
  劣势:只能支持有序的容器类型 无序的无法取值兼容性没有迭代取值高
2.迭代取值
	优势:兼容所有的容器类型
  劣势:取值的顺序永远都是从左往右 并且无法重复获取 去完就完了
"""迭代器里的东西是固定的,每取一个就会少一个取完就开空了"""

三.for循环内部原理

for循环底层原理
for 变量名 in 可迭代的对象(需要循环的对象):
      循环体代码
1.将in后的数据调用__iter__()变成迭代器对象
2.针对产生的迭代器对象依次调用__next__()方法迭代取值
"""也就是依次取出赋予变量名"""
3.当值取完后 会自动处理报错自己退出循环

例题

l1 = [11, 22, 33, 44, 55, 66, 77, 88]
将l1内元素挨个打印出来不用for循环
res = iter(l1)   # ser = l1.__iter__
n = 0
while n < len(l1):
    print(next(res))  # print(res.__next__)
    n += 1
将l1内元素挨个打印出来

四.for循环的本质

# 利用while与异常捕获 实现for循环的功能
info = {'name': 'jason', 'age': 18, 'pwd': 123}
1.先转换成迭代器对象
res  = info.__iter__()
res = iter(info)
2.迭代取值
while True:
    # print(res.__next__())
    try:
        print(next(res))
    except StopIteration as e:
        # 结束while循环
        break
字典用for循环只能取键不能取值
结果:
name
age
pwd

五.异常处理

1.什么是异常:就是代码运行出错异常会导致程序立即停止
俗称>>>:bug
2.异常的组成部分

3.异常分类
1.语法异常:同等于函数括号后不加冒号等def func()
2.逻辑异常:如果所示出现红色的异常框
3.异常分类:
NameError 名字异常
IndexError 索引错误
KeyError 键错误
ValueError 值错误
等等

六.异常处理

1.编写代码的同时肯定会碰到一些自己不确定是否出错的地方,会直接导致程序停止,但也可以通过代码来临时补漏避免程序的停止
2.基本语法

try:
可能会出错的代码
  except 错误的类型 as e:  # e指代的就是错误的提示信息
    针对性的处理措施
可再往下嵌套

3.万能异常处理

try:
  可能会出错的代码
except Exception as e:
  统一处理
"""能不少用就不用"""

七.异常结合其他代码使用

# 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 = 'jason'
	assert isinstance(name,str)
 
# 5.主动报错(需要掌握)
	raise NameError('不爽 就要作!!!')
  '''由于是主动报错 所以可以非常明确的知道错误的类型'''

posted @ 2022-03-23 17:50  笑舞狂歌  阅读(28)  评论(0)    收藏  举报