Python 编程骚操作连载(二)- 类与对象

简介: Python 编程骚操作连载(二)- 类与对象

一、可迭代对象与迭代器对象

在遍历一个非常大的文件时如果一次性读取全部内容然后在进行输出可能会导致内存不够的想象,正确的方式应该是读取一条输出一条,这样可以极大的节约内容空间,那么如何实现对象的迭代?

首先来看看 可迭代迭代器 的区别:

  • 可迭代可迭代对象,指的是可以通过 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 中 liststring 等都可以使用 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))
复制代码

执行上述代码,输出内容如下:

3ab0df36bb164cdfa8d2a7c2ec4415f3_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

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))
复制代码

执行上述代码,输出结果如下:

7712c556938b4bb983f4e44bba3bb78b_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

列表中只有四个元素,当迭代到第 5 个元素时列表不存在,所以抛出异常。


相关文章
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
28天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
108 80
|
17天前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
34 14
|
27天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
67 2
|
28天前
|
存储 数据处理 Python
Python如何显示对象的某个属性的所有值
本文介绍了如何在Python中使用`getattr`和`hasattr`函数来访问和检查对象的属性。通过这些工具,可以轻松遍历对象列表并提取特定属性的所有值,适用于数据处理和分析任务。示例包括获取对象列表中所有书籍的作者和检查动物对象的名称属性。
31 2
|
1月前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
53 10
|
1月前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
1月前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
1月前
|
人工智能 数据挖掘 开发者
探索Python编程之美:从基础到进阶
本文是一篇深入浅出的Python编程指南,旨在帮助初学者理解Python编程的核心概念,并引导他们逐步掌握更高级的技术。文章不仅涵盖了Python的基础语法,还深入探讨了面向对象编程、函数式编程等高级主题。通过丰富的代码示例和实践项目,读者将能够巩固所学知识,提升编程技能。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考和启示。让我们一起踏上Python编程的美妙旅程吧!