可迭代对象与迭代器对象

  • 1 > 常见的内置函数2
    • 1.1 > help() 查看注释信息
    • 1.2 > id() 返回一串相当于内存地址的数字
    • 1.3 > int() 类型转换、机制转换
    • 1.4 > isinstance() 判断数据类型
    • 1.5 > pow() 幂指数
    • 1.6 > round() 四舍五入
    • 1.7 > sum()求和
  • 2 > 可迭代对象
    • 2.1 > 可迭代对象的定义
    • 2.2 > 可迭代对象有哪些
    • 2.3 > 迭代器对象
    • 2.4 > for循环内部原理
  • 3 > 异常处理
    • 3.1 > 异常信息的组成部分
    • 3.2 > 异常的分类
    • 3.3 >异常的类型
  • 4 > 异常处理实操
    • 4.1 > 基本语法结构
    • 4.2 > 异常处理了解
      • 4.2-1 > 结合else使用
      • 4.2-2 > 结合finally使用
      • 4.2-3 > 全部整合到一起使用
      • 4.2-4 > 断言(了解中的了解)
      • 4.2-5 > 主动报错(需要掌握)
  • 5 > for循环的本质
  • 6 > 迭代取值与索引取值的对比
    • 6.1 >索引取值
    • 6.2 > 迭代取值

1 > 常见的内置函数2

1.1 > help() 查看注释信息

 help(len)

1.2 > id() 返回一串相当于内存地址的数字

print(id('jason'))

1.3 > int() 类型转换、机制转换

 int(123)

1.4 > isinstance() 判断数据类型

print(type('jason') is str)  # 类型判断 别扭的很 不推荐print(isinstance('jason', str))  # Trueprint(isinstance('jason', int))  # False

1.5 > pow() 幂指数

print(pow(10,2))

1.6 > round() 四舍五入

print(round(11, 1))  # 第二个参数控制需要保留几位小数部分print(round(11.29, 1))print(round(11.59, 1))

1.7 > sum()求和

print(sum([11,2,2,3,4,3,2]))

2 > 可迭代对象

  迭代其实就是跟新换代,每一次迭代的过程都需要依赖上一次的结果。类似于我们的游戏的更新其实就是版本的迭代。具体操作代码如下:

'''单纯的循环,并不是迭代'''import timewhile True:print(123)time.sleep(0.1)'''迭代的具体写法如下:'''n = 1while True:print(n)n +=1'''迭代取值的具体写法如下:'''l1 = [11, 22, 33, 44, 55]n = 0while n < len(l1):print(l1[n])n += 1

2.1 > 可迭代对象的定义

  内置有_ _ iter _ _ 方法的都可以称之为是可迭代对象。
  用大白话理解就是数据可以通过点的方式点出来 _ _ iter _ _,它的读法就是双下iter方法。

2.2 > 可迭代对象有哪些

  可迭代对象有:字符串、列表、字典、元组、集合、文件。

  可迭代对象其实就是为了后续迭代取值做准备,提供了不依赖索引取值的方式。

2.3 > 迭代器对象

# 1.迭代器对象的含义可迭代对象调用_ _ iter _ _ 方法之后生成的结果就是迭代器对象
# 2.迭代器对象的特征含有_ _iter_ _方法和_ _ next_ _ 方法
# 3.迭代器对象的本质迭代器对象能够极大的节省存储空间类似于一个哆啦a梦的口袋,我们不用的时候就是一个口袋的面积,用到的时候可以从中取出很多的数据
# 4.迭代器对象的取值方式调用_ _ next_ _方法即可,如果取完了则会直接报错!!!开辟了一种不需要索引取值的方式(for循环底层依据的就是迭代器对象)
# 5.迭代器对象补充说明#5.1 有很多双下方法其实都有简便写法 但不是全部'''_ _ 方法名_ _ 等价 方法名()最常见的两个是__iter__   iter()__next__   next()#5.2 有一些可迭代对象本身也是迭代器对象 :>>>> 文件对象#5.3 可迭代对象调用一次__iter__方法编程迭代器对象  如果继续调用 结果还是迭代器对象本身res = s.__iter__()res1 = s.__iter__().__iter__().__iter__()print(res, res1)  # <str_iterator object at 0x10762bdd8> <str_iterator object at 0x107636dd8># 5.4 迭代取值的要求S = 'bob'# print(s.__iter__().__next__())  # b 每次先产生一个新的迭代器对象然后取值# print(s.__iter__().__next__())  # b 每次先产生一个新的迭代器对象然后取值# print(s.__iter__().__next__())  # b 每次先产生一个新的迭代器对象然后取值res = s.__iter__()  # 已经变成迭代器对象了print(res.__iter__().__next__())  # b  之后再调用还是自身print(res.__iter__().__next__())  # o'''

2.4 > for循环内部原理

  for 循环底层原理如下:

 for 变量名 in 可迭代对象:循环体代码'''1.会将in后面的数据调用__iter__()变成迭代器对象文件对象也可以for循环 因为本身就是迭代器对象,再次调用不变2.针对产生的迭代器对象依此调用__next__()方法迭代取值3.当值取完之后,会自动处理报错并退出循环'''

  我们也可以不依赖for循环完成对列表元素的取值,如下:

 l1 = [11,22,33,44,55,66,77,88]res = l1.__iter__()n = 0while n< len(l1):print(res.__next__())n += 1

3 > 异常处理

  异常的意思就是代码运行出错之后就会产生的,异常会导致程序立刻停止,所以要极力避免出现这种情况的发生,异常也有个响亮的名字叫Bug。

3.1 > 异常信息的组成部分

  我们选取一段报错信息来进行说明:

Traceback (most recent call last):File "/Users/jiboyuan/PycharmProjects/day16/05 异常处理.py", line 3, in <module>name
NameError: name 'name' is not defined

  1.line关键字所在的一行:用于提示你代码哪一行出错了,点击前面的蓝色字体可以直接定位
  2.NameError错误的类型:报错类型可以分为很多类型。
  3.name ’ name ’ is not defind:具体的报错原因(就是解决报错的答案)

3.2 > 异常的分类

  1.语法异常,不允许出现,出现了我估计你也从公司直接滚蛋了。
  2.逻辑异常,可以出现,出现咱就尽快改就可以了。

3.3 >异常的类型

异常代码 异常名称 异常原因
print(name) NameError 名字错误
print(l1[100]) IndexError 索引错误
print(d[‘age’]) KeyError 键错误
int(‘bob’) ValueError 值错误

4 > 异常处理实操

  有时候针对可能会出错的代码,也可以自己提前写好处理措施。

4.1 > 基本语法结构

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

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

  很多时候可能自己都不知道会报什么类型的错误,这时候我们就要用到这个万能异常类型 Exception。具体代码如下:

try:可能会出错的代码except Exception as e:  统一的处理措施

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

4.2 > 异常处理了解

4.2-1 > 结合else使用

   当try检测的代码没有发生异常 正常运行完毕之后执行else的子代码,具体代码如下:

 try:可能会出错的代码except Exception as e:  统一的处理措施else:可能会出错的代码没有出错 最后走else子代码

4.2-2 > 结合finally使用

   无论try检测的代码是否有异常 最后都会执行finally子代码,具体代码如下:

  try:nameexcept Exception as e:print(e)finally:无论try检测的代码是否有异常 最后都会执行finally子代码

4.2-3 > 全部整合到一起使用

  将else和finall结合一起使用;

  try:nameexcept Exception as e:print(e)else:print('没报错 好极了')finally:print('管你错不错 都执行')

4.2-4 > 断言(了解中的了解)

  主要是用于判断自己写的代码是什么数据类型,具体代码如下:

name = 'jason'assert isinstance(name,str)

4.2-5 > 主动报错(需要掌握)

  主要就是来主动将自己写的代码报错:

 raise NameError('不爽 就要作!!!')

5 > for循环的本质

  for循环的本质其实就是利用了while与异常捕获,实现的for循环的功能,具体代码如下:


'''例如:编写循环获取字典当中的K值'''info = {'name': 'jason', 'age': 18, 'pwd': 123}# 1.先转换成迭代器对象res = iter(info)# 2.进行迭代取值while True:# 3. 使用异常捕获处理迭代结束后的报错问题try:print(next(res))except StopIteration as e:# 报错就结束while循环break

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

6.1 >索引取值

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

6.2 > 迭代取值

  优势:兼容所有的容器类型
  劣势:取值的顺序永远都是从左到右 ,并且无法重复获取,去完就完了。

可迭代对象与迭代器对象相关推荐

  1. python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式...

    复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象---->  延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...

  2. 传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现

    可迭代对象 首选确保for循环的in后面是一个可迭代对象,这样就能通过python内置函数iter()得到一个迭代器对象(iterator) 我们分别把列表list_test和字符串str_test分 ...

  3. python迭代-可迭代对象与迭代器对象

    可迭代对象与迭代器对象 问题举例 某软件要求,从网络抓取各个城市的气温信息,并依次显示: 北京:15~22 上海:18~23 ...... 如果一次抓取所有城市气温信息再显示,显示第一个城市的气温时会 ...

  4. python——常见内置函数、可迭代对象与迭代器对象

    目录 一.常见内置函数 1.abs() 2.all()与any() 3.bin() oct() hex() 4.int() 5.bytes() 6.callable() 7.chr() ord() 8 ...

  5. python中常用的内置函数,可迭代对象,迭代器对象

    知识点1 :常用内置函数 1 常用内置函数的实际应用 1.1 abs() 返回值是一个绝对值,参数可以是整数和浮点数,如果参数是一个复数,则返回它的模. print(abs(-12.3)) # 12. ...

  6. 十八、可迭代对象、迭代器对象和生成器

    可迭代对象.迭代器对象和生成器 一 可迭代对象 二 迭代器对象 三 迭代器优缺点 三 for循环原理 四 异常处理 4.1 什么是异常 4.2 异常操作 4.2.1 语法 4.2.2 实际操作 4.2 ...

  7. 可迭代对象和迭代器对象

    可迭代对象(iterable)和迭代器对象(iterator)的概念是如此相似,常常容易混淆,今天就来梳理区分一下. 可迭代对象 可迭代对象简单来说这个对象是可以迭代的,例如 list,tuple,s ...

  8. Python可迭代对象和迭代器对象详解

    1.可迭代对象 ''' 迭代对象是一个自身可迭代(__iter__)或者序列(_getitem__) '''# 迭代例子,列表和字符串是可迭代对象 l = [1, 2, 3, 4] s = 'abcd ...

  9. 可迭代对象、迭代器与生成器

    迭代器 什么是迭代器 迭代指的是一个重复的过程,且不是单纯的重复,每次重复都基于上次的结果. 迭代器指的是迭代取值的工具,该工具的特点是可以不依赖于索引取值. 为什么用迭代器 为了找出一种通用的&am ...

最新文章

  1. OpenCV(十九)直方图(直方图计算、掩膜、均衡化、自适应均衡化)
  2. 她是985高校的90后博导!常被认成“师姐”,喜欢减压式教学
  3. python3精要(3)-python对象类型,数字,序列
  4. PYTHON-迭代器,xxx生成式
  5. mysql查询网址_bootstrap+flask+mysql实现网站查询
  6. 程序员没有女朋友的原因,我终于找到了!
  7. scrapy框架的理解
  8. Android官方开发文档Training系列课程中文版:构建第一款安卓应用之程序运行
  9. nextfloat_Java Random nextFloat()方法与示例
  10. SQL开发技巧(二) 【转】感觉他写的很好
  11. MySQL架构体系(从一条语句出发了解MySQL各部分的作用)
  12. 【2018蓝桥省赛A组C/C++】倍数问题(dp+滚动数组)
  13. 关于键盘盲打的一些小技巧
  14. 【Linux学习】Vim 怎么设置显示行号以及永久性显示行号
  15. 值得推荐的Vue 移动端UI框架
  16. excel中将两列交叉合并为一列
  17. 【英语语法入门】 第31讲 [被动语态 (1)]被动态的构成和含义
  18. 63%的农村孩子没上高中,中国如何跨越中等收入陷阱?
  19. KerberosSDR代码笔记(5) 信号处理(采样时间延迟计算、相位差计算的2种方法、MUSIC算法)
  20. 电脑下载工具哪个软件好 电脑下载工具去哪下载

热门文章

  1. Python的三种可变参数
  2. 2022年华为ICT大赛 全球总决赛!中文综合任务书-网络赛道真题!
  3. 控制物体运动模长来销毁物体(transform.position.magnitude)
  4. html图标页面横向居中,结构-行为-样式-csshtml横纵居中最佳实践
  5. 2008年10月高等教育国际金融全国统一命题考试
  6. JMM中的happens-before原则
  7. oracle数据的变更无效,ORA-22858:数据类型的变更无效varchar2类型转换为clob类型
  8. js引用python里面的变量,在Javascript和Python之间传递变量
  9. vue从后台获取新数据后刷新_vue传参页面刷新数据丢失问题
  10. 变形金刚图片----霸天虎