Python 编程骚操作连载(二)- 类与对象
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
一、可迭代对象与迭代器对象
在遍历一个非常大的文件时如果一次性读取全部内容然后在进行输出可能会导致内存不够的想象,正确的方式应该是读取一条输出一条,这样可以极大的节约内容空间,那么如何实现对象的迭代?
首先来看看 可迭代
、迭代器
的区别:
可迭代
既可迭代对象
,指的是可以通过for
循环进行遍历的对象,常见的 list, string, tuple, set, dict 等都是可迭代对象
,数字不是可迭代对象。如果一个对象实现了__iter__方法,这个对象就是可迭代对象。迭代器
既迭代器对象
指实现了__iter__方法和__next__方法的对象,迭代器
对象可以通过调用 iter 函数且入参为可迭代对象
生成。
可迭代对象不一定是迭代器,迭代器一定是可迭代对象,可迭代对象只需实现一个 __iter__
方法,而迭代器需要实现 __iter__
方法和 __next__
方法。
# 可迭代对象
list_data = ['peter', 'tom', 'clint', 'stark']
string_data = 'Stark'
for item in list_data:
print(item)
for str in string_data:
print(str)
执行上述代码,输出结果如下:
peter
tom
clint
stark
S
t
a
r
k
Python 中 list
、string
等都可以使用 for
循环进行遍历,都是可迭代对象
list_data = ['peter', 'tom', 'clint', 'stark']
string_data = 'Stark Industry'
print(iter(list_data))
print(type(iter(list_data)))
print(iter(string_data))
print(type(iter(string_data)))
print(iter(1))
执行上述代码,输入结果如下:
<list_iterator object at 0x102692d90>
<class 'list_iterator'>
<str_iterator object at 0x102692d90>
<class 'str_iterator'>
<font color="orange"> Traceback (most recent call last):
"/python-tricks/ex1.py", line 17, in <module>
print(iter(1))
TypeError: 'int' object is not iterable
iter 函数传入可迭代对象返回的是一个迭代器对象 list_iterator object at 0x102692d90
, 对象的类型是 class 'list_iterator'
,iter 函数传入一个数字对象是无法返回迭代器的,应为int 类型数字是不可迭代的。
list_data = ['peter', 'tom', 'clint', 'stark']
string_data = 'Stark Industry'
print(dir(list_data))
print(list_data.__iter__())
print(iter(list_data))
执行上述代码,输出内容如下:
list 可迭代对象实现了 __iter__
方法,并且根据输出结果来看可迭代对象调用__iter__
方法的返回值和 iter
函数传入一个可迭代对象的返回值是相同的。
iter
函数调用时会首先找到 __iter__
方法,如果该方法没有找到,存在在 __getitem__
方法也是可以的,字符串在 Python2 中只包含了 __getitem__
方法,在 Python3 中两个方法都包含。
迭代器可以调用 __next__
方法进行迭代输出元素,也可以通过 next
方法传入一个迭代器对象来进行迭代。
list_data = ['peter', 'tom', 'clint', 'stark']
list_iterator = iter(list_data)
print(dir(list_iterator))
print(next(list_iterator))
print(next(list_iterator))
print(next(list_iterator))
print(next(list_iterator))
print(next(list_iterator))
执行上述代码,输出结果如下:
列表中只有四个元素,当迭代到第 5 个元素时列表不存在,所以抛出异常。
相关文章
- 在pycharm中如何新建Python文件?_github下载的python源码项目怎么用
- pycharm打包python项目_Python怎么打包
- pycharm配置python运行环境_C中调用Python
- python编程前景_Python前景如何,学完后可以从事方向?
- python编程是什么-Python编程
- python编程是啥-Python编程「建议收藏」
- python jieba库_Python jieba库的使用说明「建议收藏」
- python解压bz2文件命令,在Python中解压缩.bz2文件
- Python表白代码合集:5种表白代码,找不到对象你来找我,这也太秀了叭
- python中dtype什么意思_NumPy Python中的数据类型对象(dtype)
- python字符串拼接
- python pytorch 版本,python 如何查看pytorch版本
- Python udp编程_python socket udp
- python udp编程_Python核心编程
- Python 包的依赖管理,有解了!
- 卧槽,这才是最强Python刷题网站!
- python win32api sendmessage_Python win32api.SendMessage方法代码示例[通俗易懂]
- 正则表达式Python_python正则表达式匹配字符串
- python type error是什么意思_Python 报错 TypeError:’DoesNotExist’对象不可调用
- python 元组 【基本使用功能】
- 开发Linux下Python编程:实现自己的开发梦想(linux下python)
- Python结合MySQL实现信息交互(python与mysql交互)
- 掌握Linux环境下的Python编程(linux执行python)
- Python编程连接MySQL:从零开始(python与mysql)
- python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
- 使用Python进行稳定可靠的文件操作详解
- python中的对象拷贝示例python引用传递
- Python设计模式之单例模式实例
- Python中的对象,方法,类,实例,函数用法分析