python学习--如何实现可迭代对象(itearable)和迭代器(iterator)

关于可迭代对象Iterable 和迭代器对象iterator

可迭代对象:可以直接作用于for循环的对象统称为可迭代对象:Iterable。 可迭代对象包含一个__iter__方法,或__getitem__方法,其中__iter__方法会返回一个迭代器iterator。

      可迭代对象一类是集合数据类型,如list,tuple ,dict, set,str,  另一类可迭代对象是生成器generator。

迭代器对象:可以作用于next()函数的对象都是迭代器对象。迭代器对象必须实现__next__方法。

for循环时候,如果循环的是个可迭代对象Iterable,会调用Iterable的__iter__方法,返回一个迭代器,然后调用他的next方法,直到遇到StopIteration异常跳出循环。

      如果循环的是一个迭代器对象,就直接调用next方法,知道遇到StopIteration异常跳出循环。

先生成一个迭代器对象,再生成一个可迭代对象

from collections import Iterator,Iterable
class AIterator(Iterator):
  def __init__(self, s, e):
    self.current = s
    self.end = e
  # def __iter__(self):
    # return self
  def __next__(self):
    if self.current < self.end:
      self.index = self.current
      self.current += 1
      return self.index
    else:
    raise StopIteration
class AIterable:
  def __init__(self,s,e):
    self.s=s
    self.e=e
  def __iter__(self):
    return AIterator(self.s,self.e)

it = AIterator(1,10)
iteable=AIterable(2,5)
for i in it:
print(i)

时间: 2024-11-29 10:32:22

python学习--如何实现可迭代对象(itearable)和迭代器(iterator)的相关文章

Python学习-解压可迭代对象赋值给多个变量

解压序列赋值给多个对象 任何的序列(或者是可迭代对象)可以通过一个简单的赋值语句解压并赋值给多个变量.唯一的前提就是变量的数量必须跟序列元素的数量是一样的. >>> data = ['abcd','a',1,2,(3,4)]>>> a,b,c,d,e = data>>> a,b,c,d,e('abcd', 'a', 1, 2, (3, 4))>>> a,b,c,d,(e,f) = data>>> f4>>

可迭代对象 Iterable 与 迭代器 Iterator

迭代器 Iterator与可迭代对象  1 常见的可迭代对象: 字符串列表字典集合元组文件句柄 -->> 迭代器range() -->> 只是一个可迭代对象迭代器本身也可迭代 2 判断是否是 可迭代对象 的方法: 1 from collections import Iterable isinstance('abcd',Iterable) 2 可以判断不同方法的差异 dir() 用set集合 有__iter__() 方法 的数据类型 (即 可迭代协议 ------- 数据类型与pyt

Python学习心得:类与对象

教材:<简明Python教程> Python面向对象: 如shell这种面向过程的程序都是通过"操作数据的函数"或者"语句块"来设计函数. python的程序(面向对象): 类是一个"class"类型,对象是类中的一个实例. 类的属性包括了:域和方法.(即变量和函数) 属于一个对象或类的变量被称为域,一个定义在类中的函数,叫做类的方法. 类使用关键字"class"来创建.域和方法放在同一个缩进块中. 1.域有两种:

11.Python初窥门径(函数名,可迭代对象,迭代器)

Python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return l print(func(1)) # [1] print(func(2)) # [1,2] print(func(3)) # [1,2,3] 二.函数名的应用 函数名指向的是函数的内存地址,加上()就执行这个函数 def func(args): return args print(func) #

Python 函数名,可迭代对象及迭代器

函数名是什么?1,函数名就是函数的内存地址a = 2b = ac = bprint(c)2,函数名可以作为变量.def func1(): print(666)f1 = func1()f2 = f1print(f2)3,函数名可以作为函数的参数.def func1(): print(666)def func2(x): print(x) x()print(func1)函数名可以当做函数的返回值.def wapper(): def inner(): print('inner') return inne

流畅python学习笔记:第十四章:迭代器和生成器

迭代器和生成器是python中的重要特性,本章作者花了很大的篇幅来介绍迭代器和生成器的用法. 首先来看一个单词序列的例子: import re re_word=re.compile(r'\w+') class Sentence(object):     def __init__(self,text):         self.text=text         self.word=re_word.findall(text)     def __getitem__(self, item):   

python学习笔记4--装饰器、生成器、迭代器、匿名函数、内置方法、数据序列话

一.装饰器 1.意义:当需要给程序中某些函数新增某项功能时,为了避免直接修改函数源代码和函数调用方式,所以引入装饰器. 2.定义:装饰器用于装饰其他函数,就是为其他函数提供附加功能. 3.原则: 1)不修改被装饰的函数的源代码 2)不修改被装饰的函数的调用方式 4.装饰器储备知识: 1)函数即变量 2)高阶函数 a.把函数当做参数传递给另一个函数(在不修改被修饰函数源代码的情况下为该函数添加功能) b.返回值中包含函数名(在不修改被修饰的函数的调用方式的情况下为该函数添加功能) 3)嵌套函数:在

python学习-enumerate为可迭代的对象添加序号

1 # !/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # li = ["电脑","U盘","鼠标","游艇"] 4 # for item in li: 5 # print(item) 6 # input = input("请输入商品:") 7 8 #enumrate自动生成一列,默认0 自增1 9 #字符串 =>数字 int(字符串) 10 li =

Python学习笔记7:函数对象及函数对象作参数

一.lambda函数 例如: fun1 = lambda x,y: x + y print fun1(3,4) 输出:7 lambda生成一个函数对象.该函数参数为x,y,返回值为x+y.函数对象赋给func. func的调用与正常函数无异. 上面的代码等价于: def fun2(x, y): return x + y 二.函数作为参数 函数可以作为一个对象,进行参数传递. 例如: fun = lambda x ,y : x+y def runFun(fun, a, b): print fun(