迭代器

Python迭代器

本小妞迷上赌 提交于 2019-12-05 06:25:04
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法: iter() 和 next() 。 字符串,列表或元组对象都可用于创建迭代器: 实例(Python 3.0+) >>> list=[1,2,3,4] >>> it = iter(list) # 创建迭代器对象 >>> print (next(it)) # 输出迭代器的下一个元素 1 >>> print (next(it)) 2 >>> 迭代器对象可以使用常规for语句进行遍历: 实例(Python 3.0+) #!/usr/bin/python3 list = [ 1 , 2 , 3 , 4 ] it = iter ( list ) # 创建迭代器对象 for x in it : print ( x , end = " " ) 执行以上程序,输出结果如下: 1 2 3 4 也可以使用 next() 函数: 实例(Python 3.0+) #!/usr/bin/python3 import sys # 引入 sys 模块 list = [ 1 , 2 , 3 , 4 ] it = iter ( list ) # 创建迭代器对象 while True :

多任务-协程

放肆的年华 提交于 2019-12-05 05:15:09
目录   迭代器   生成器   协程-yield   协程-greenlet   协程-gevent   进程、线程、协程区别    一、迭代器     迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。   1.可迭代对象     我们已经知道可以对list、tuple、str等类型的数据使用for...in...的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代     但是,是否所有的数据类型都可以放到for...in...的语句中,然后让for...in...每次从中取出一条数据供我们使用,既供我们迭代吗?        >>> for i in 100:   ... print(i)   ...   Traceback (most recent call last):   File "<stdin>", line 1, in <module>   TypeError: 'int' object is not iterable   >>>   # int整型不是iterable,即int整型不是可以迭代的   # 我们自定义一个容器MyList用来存放数据,可以通过add方法向其中添加数据   >>> class MyList(object):

python的iterable、iterator、generator

人盡茶涼 提交于 2019-12-05 04:34:22
可迭代对象iterable 一个拥有 __iter__ 方法的对象,可以使用for循环遍历 可迭代对象有: str 、 list 、 tuple 、 dict 、 set 、 iterator 、 generator 、 file # 判断一个对象是否可迭代 >>> from collections import Iterable >>> isinstance('abc', Iterable) True >>> isinstance(100, Iterable) False 迭代器 一个实现了 __iter__ 方法和 __next__ 方法的对象,就是迭代器 迭代器是可以被 next() 函数调用并不断返回下一个值的对象 iter() 函数通过调用可迭代对象的 __iter__() 方法,获取该对象的迭代器,然后对获取到的迭代器不断使用 next() 函数来获取下一条数据 迭代器有: generator 、 iter(iterable) >>> from collections import Iterator >>> isinstance([1,2], Iterator) # 列表不是迭代器 False >>> isinstance((1,2), Iterator) False >>> isinstance([i for i in range(10)], Iterator)

迭代器

一曲冷凌霜 提交于 2019-12-05 04:19:21
迭代器 默认参数的一个考点 当你的默认参数是可变数据类型的时候,那么你要当心了 def func(a,lst = []): 可变数据类型使用的是同一个内存空间 lst.append(a) return lst print(func(1)) -----[1] print(func(2)) -----[1, 2] print(func(3,[])) -----[3] 函数名的应用 函数名是一个特殊变量,它具有变量的特点 函数名指向的是函数的内存地址,这个内存地址加上()就可以运行函数. 函数名是一个变量,可以赋值运算 def func(): print(666) print(func) a = func a() # 也可以运行函数funcdef func(): print(666) print(func) a = func a() # 也可以运行函数func 函数名可以作为容器类类型的元素 def func(): print(666) lst = [func,func,func] lst[1]() for el in lst: el() 函数名可以作为函数的实参传进去 def func1(): print('in func1') def func2(argv): argv() print('in func2') func2(func1) 函数名可以作为函数的返回值 def func1(

生成器

别等时光非礼了梦想. 提交于 2019-12-05 04:18:56
生成器 一. 生成器的定义: 生成器的本质就是迭代器 ,在python社区中,大多数时候都把迭代器和生成器是做同一个概念。生成器和迭代器,唯一的不同就是:迭代器都是Python给你提供的已经写好的工具或者通过数据转化得来的,(比如文件句柄,iter([1,2,3])。 生成器是需要我们自己用python代码构建的工具 。最大的区别也就如此了。 二、生成器的构成 生成器表达式 通过生成器函数 python内置函数或模块提供 三、生成器函数 def func(): print(11) return 22 ret = func() print(ret) 将函数中的return换成yield,这样func就不是函数了,而是一个生成器函数 def func(): print(11) yield 22 ret = func() print(ret) 注意:结果 <generator object func at 0x031E5CB0> 执行这个函数的时候,就不再是函数的执行了,而是获取这个生成器对象. 生成器的本质就是迭代器,迭代器如果取值,生成器就如何取值 四、生成器的取值 def func(): print(11) yield 22 qener = func() # 这个时候函数不会执行,而是获取到生成器(就是那个内存地址!!) ret = next(qener) # 这个时候函数才会执行

特殊的成员方法

帅比萌擦擦* 提交于 2019-12-05 04:07:30
#如果类中有__iter__方法,那么创建的对象就叫做可迭代对象#对于 对象.__iter__()的返回值是一个迭代器#如果for循环遇到 迭代器,直接用next()方法执行#如果for循环遇到 可迭代对象, 可迭代对象.__iter__()方法获得迭代器,然后再继续next() 来源: https://www.cnblogs.com/startl/p/11904798.html

迭代器中set的使用

天大地大妈咪最大 提交于 2019-12-05 04:00:41
今天对迭代器中的set方法进行了一下简单的使用,由于之前使用过list方法,所以将他与list进行了一下对比。 list中加入对象时不会进行查重,也就是只要是一个符合的对象就可以加到list中,而对于set来说他是一个不能有重复的集合,会对其进行一个查重。另外两种集合对排序的方法也是不一样的,对于list来说,你可以先将其存在集合中,然后调用方法,对list进行一次排序,而对于set来说,他是在用TreeSet集合在向集合的添加的过程中就做了一个简单的排序,第一次使用这种方法,对其中的具体原理还是不太了解,感觉在使用过程中主要就是这些区别。 以下是两种方法的使用 package iterator; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Set; import java.util.TreeSet; import javax.net.ssl.SNIHostName; public class Client { public static void main(String[] args) { List<Student> list = listStudent(); System

生成器代替迭代器

纵饮孤独 提交于 2019-12-05 03:50:00
import re import reprlib RE_WORD = re.compile('\w+') ''' 生成器是迭代器 ''' def gen_123(): print('start') yield 'A' print('continue') yield 'B' print('end') for i in gen_123(): print('-->', i) ''' 第一个循环: start --> A 第二个循环 continue --> B 第三个循环: end for循环会捕获stopiteration的异常 ''' class Sentence: def __init__(self, text): self.text = text self.words = RE_WORD.findall(text) def __repr__(self): return 'Setence(%s)' % reprlib.repr(self.text) def __iter__(self): for word in self.words: yield word # 含有yield关键字,就是一个生成器函数 return ''' 使用生成器代替去实现一个迭代器 ''' # s4 = Sentence('pig and pepper') # it = iter(s4) # print(it

迭代器和可迭代对象

烂漫一生 提交于 2019-12-05 03:49:46
import re import reprlib RE_WORD = re.compile('\w+') class SentenceIterator: def __init__(self, words): self.words = words self.index = 0 def __next__(self): try: word = self.words[self.index] except IndexError: raise StopIteration() self.index += 1 return word def __iter__(self): # 其实可以不用写 return self class Sentence: def __init__(self, text): self.text = text self.words = RE_WORD.findall(text) def __repr__(self): return 'Setence(%s)' % reprlib.repr(self.text) def __iter__(self): return SentenceIterator(self.words) s4 = Sentence('pig and pepper') it = iter(s4) print(next(it)) print(next(it))

java常用工具集合

≡放荡痞女 提交于 2019-12-05 03:49:00
1、集合和数组的区别: ①集合中只能存储引用型数据,如果存储基本类型会自动装箱;数组既可以存储基本类型也可以存储引用类型的数据。 ②集合长度不固定,可任意扩充;数组长度固定。 2、Java的集合体系: (1)单列集合 :(顶层是Collection接口) ①List集合 (list是接口,要想使用里面的方法必须创建子类对象) :最常用的子类是ArrayList List集合中元素可重复,有序。通过创建子类对象使用:List list=new ArrayList(); eg:向List集合中添加三个元素并遍历打印 分析:向集合中添加元素的方法:add()、遍历集合的方式:for()、获取集合中元素个数的方法:size() package com.wang.list; import java.util.ArrayList; import java.util.List; /*List是接口,要创建子类对象 使用集合的步骤:创建集合对象-》创建元素对象-》将元素对象添加到集合对象中-》遍历集合 */ public class ListDemo01 { public static void main(String[] args) { //往List集合中添加3个学生对象,然后遍历 //创建集合对象 List list=new ArrayList(); //创建元素对象 Student s1