迭代 可迭代对象 迭代器的bj
1.迭代的概念
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
2.可迭代对象
- 可以被for循环遍历获取的对象为可迭代对象
- 具备__iter__方法的对象为可迭代对象
3.可迭代对象的判断
- isinstance :提供判断某个对象是否属于某个类,如果属于返回True,如果不属于返回False
- for循环来判断
- 如果对象中具备__iter__方法的话,就是可迭代对象
3.自定义类生成实例对象演示
# 导入模块
from collections.abc import Iterable
# 什么是可迭代对象
class Mylist:
def __init__(self):
self.items = list()
def add(self, item):
self.items.append(item)
m = Mylist()
# 如果是可迭代对象,返回True,否则返回False
print(isinstance(m, Iterable))
4.具备__iter__方法的类
# 什么是可迭代对象
class Mylist:
def __init__(self):
self.items = list()
def add(self, item):
self.items.append(item)
def __iter__(self):
pass
m = Mylist()
# 如果是可迭代对象,返回True,否则返回False
print(isinstance(m, Iterable))
5.iter()函数和__next__()函数
- iter()函数:可以获取可迭代对象的迭代器
- 调用iter函数会触发__iter__魔法方法
- next()函数:对一个可迭代对象的迭代器调用该方法,可以返回该对象的下一条数据。
- 调用next函数会触发__next__魔法方法
6.__iter__方法返回迭代器
# 导入模块
from collections.abc import Iterable
# 什么是可迭代对象
class Mylist:
def __init__(self):
self.items = list()
def add(self, item):
self.items.append(item)
def __iter__(self):
# 局部iter方法此时该对象仅仅为可迭代对象,还不能进行for循环遍历
# __iter__必须返回一个具备__iter__方法和__next__方法的对象
# 只要具备了__iter__方法和__next__方法,那么这个对象叫做迭代器对象
return MyIterator
class MyIterator:
def __iter__(self):
pass
def __next__(self):
pass
mi = MyIterator()
m = Mylist()
# 如果是可迭代对象,返回True,否则返回False
# print(isinstance(m, Iterable))
m.add(1)
m.add(2)
m.add(3)
for i in m:
print(i)
# iter()函数 __iter__方法 iter(对象) --> 返回值
#
#
#
#
# next()函数 __next__方法 next(返回值)
7.迭代器的概念
- 具备了__iter__方法
- 具备了__next__方法
8.总结
- 可迭代对象:具备__iter__方法的对象为可迭代对象
- 如何能够被for‘循环:__iter__具有返回值,返回的是一个迭代器
- 迭代器:具备__iter__方法和__next__方法的对象
- 只要是迭代器肯定是迭代对象 √
- 只要是可迭代对象就是迭代器 ×
1.代码实现
# 定义一个类
# 怎么样才能成为可迭代对象?
# __iter__方法需要返回什么东西?
class MyList:
def __init__(self):
self.items = list()
def add(self, item):
self.items.append(item)
# 要想成为可迭代对象类,必须具备__iter__方法
def __iter__(self):
# 省略
# 需要在iter方法内返回个什么东西
# iter方法到底需要返回一个什么东西
# 这个对象是个什么 --> 迭代器
return MyIterator(self.items)
class MyIterator:
def __init__(self, obj):
self.mes = obj
self.current_num = 0
def __iter__(self):
pass
def __next__(self):
# 索引越界
if self.current_num < len(self.mes):
result = self.mes[self.current_num]
self.current_num += 1
return result
else:
raise StopIteration
# a = MyIterator()
# 通过类生成实例对象
m = MyList()
m.add(1)
m.add(2)
m.add(3)
m.add(4)
# m对象具备使用for循环的方法吗?
# iter next
for i in m:
print(i)
2.斐波那契数列
n = int(input("请输入:"))
class Mun:
def __init__(self):
self.num1 = list()
def fbnq(self):
a = 0
b = 1
i = 0
while i < n:
self.num1.append(a)
a, b = b, a+b
i += 1
def __iter__(self):
return DieDaiQi(self.num1)
class DieDaiQi:
def __init__(self,obj):
self.mes = obj
self.current_num = 0
def __iter__(self):
pass
def __next__(self):
if self.current_num < len(self.mes):
result = self.mes[self.current_num]
self.current_num += 1
return result
else:
raise StopIteration
m = Mun()
m.fbnq()
for i in m:
print(i)
迭代 可迭代对象 迭代器的bj的更多相关文章
- python 可迭代对象 迭代器 生成器总结
可迭代对象 只要有魔法方法__iter__的就是可迭代对象 list和tuple和dict都是可迭代对象 迭代器 只要有魔法方法__iter__和__next__的就是可迭代对象 生成器 只要含有y ...
- python14 1.带参装饰器 | wrapper 了了解 # 2.迭代器 ***** # 可迭代对象 # 迭代器对象 # for迭代器 # 枚举对象
## 复习 '''函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 ...
- Day 13 可迭代对象,迭代器对象,for循环迭代,生成器对象,枚举对象
一.迭代器概念:# 器:包含了多个值的容器# 迭代:循环反馈(一次从容器中取出一个值)# 迭代器:从装有多个值的容器中一次取出一个值给外界# ls = 'abcdef'ls = [1, 2, 3, 4 ...
- 11.Python初窥门径(函数名,可迭代对象,迭代器)
Python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return ...
- Python中的可迭代对象/迭代器/For循环工作机制/生成器
本文分成6个部分: 1.iterable iterator区别 2.iterable的工作机制 3.iterator的工作机制 4.for循环的工作机制 5.generator的原理 6.总结 1.i ...
- Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器
Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器 一丶关键字:global,nonlocal global 声明全局变量: 1. 可以在局部作用域声明一 ...
- 可迭代对象&迭代器&生成器
在python中,可迭代对象&迭代器&生成器的关系如下图: 即:生成器是一种特殊的迭代器,迭代器是一种特殊的可迭代对象. 可迭代对象 如上图,这里x是一个列表(可迭代对象),其实正如第 ...
- for循环迭代可迭代对象
模仿for循环迭代可迭代对象,# for i in Iterable:# iterable >>> 迭代器.iterator# 可迭代对象 iterable# 迭代器.iterato ...
- 如何在一个for语句中迭代多个对象(2.7)
如何在一个for语句中迭代多个对象 总结: 并行迭代使用zip(l1, l2, l3) 每次迭代从3个列表里各取一个数据 串行迭代使用itertools.chain(l1, l2, l3) 相当于把3 ...
随机推荐
- Android开发-AlertDialog,Progress,ProgressDialog,自定义layout
AlertDialog 默认样式 单选样式 多选样式 自定义样式 效果图 AlertDialog效果图 class OnClick implements View.OnClickListener ...
- Spring Cloud Security OAuth2.0 认证授权系列(一) 基础概念
世界上最快的捷径,就是脚踏实地,本文已收录[架构技术专栏]关注这个喜欢分享的地方. 前序 最近想搞下基于Spring Cloud的认证授权平台,总体想法是可以对服务间授权,想做一个基于Agent 的无 ...
- mysql case when语句的使用
case具有两种格式.简单case函数和case搜索函数. 简单函数 CASE [col_name] WHEN [value1] THEN [result1]-ELSE [default] END 搜 ...
- 面试阿里,字节跳动,华为必须知道的Java创建对象的5种方式
Java创建对象的5种方式 1.直接new,调用了构造器2.通过clone(),没有调用构造器3.通过反射,调用了构造器4.通过反序列化,没有调用构造器5.通过Unsafe类的allocateInst ...
- 常见的名片尺寸如何在CorelDRAW预设
说到名片想必大家肯定不陌生,是我们生活中随处可见的物品,也是商家宣传必不可少的印刷物料.那么名片的尺寸是多少?我们做名片的时候该如何把握好名片的尺寸呢?在CDR中有专门的名片尺寸,下面小编就为大家简单 ...
- 企业安全03Django GIS SQL注入漏洞CVE-2020-9402
Django GIS SQL注入漏洞CVE-2020-9402 一.漏洞描述 Django是Django基金会的一套基于Python语言的开源Web应用框架.该框架包括面向对象的映射器.视图系统.模板 ...
- 2. 三数之和(数组、hashset)
思路及算法: 该题与第一题的"两数之和"相似,三数之和为0,不就是两数之和为第三个数的相反数吗?因为不能重复,所以,首先进行了一遍排序:其次,在枚举的时候判断了本次的第三个数的值是 ...
- VC与VB
VB调用VC dll的返回方式 第一种类型:数值传递注意:在VB中,默认变量传递方式为ByRef为地址,而传递值就是用ByVal,还要注意在C++中,int类型的变量是32位的,在VB中要用long型 ...
- Nginx配置Https(详细、完整)
Nginx配置Https(详细.完整) 原文链接:请支持原创 前置条件: 在配置https之前请确保下面的步骤已经完成 服务器已经安装nginx并且通过http可以正常访问 不会安装nginx的可以参 ...
- windows中flask的环境搭建
之前在ctf中遇到了python模板注入的题,于是就打算学习一下flask框架,它是基于Python的Web轻量级应用框架,与其他框架相比,Flask可以自主选择应用组件,可扩展性强. 安装也简单 第 ...