迭代器

Iterator迭代器

≯℡__Kan透↙ 提交于 2019-11-26 18:13:57
迭代 先判断集合是否有元素(hasNext()),如果有,则把这个元素取出来,(next())继续判断......直到把集合中所有元素取出来 java.util.Iterator 接口 迭代器,对集合元素进行遍历 使用步骤: 1.用Collection接口中的Iterator()方法获取迭代器的实现类对象,使用Interator接口接收(多态) 2.用Iteractor 接口中的boolean hasNext()判断集合有没有下一个元素 3.用Iteractor 接口中的E next()将集合中下一个元素取出来 Collection<String> col=new ArrayList<>();col.add("烟火里的尘埃");col.add("孩子");col.add("寒鸦少年");col.add("异类");col.add("我管你");//迭代器遍历Iterator<String> it=col.iterator();//1. while(it.hasNext()){ boolean has=it.hasNext(); System.out.println(has);//2. System.out.println(it.next());3. }//for each遍历for (String arr:col){ System.out.println(arr);} 来源:

魔法方法、迭代器&生成器

橙三吉。 提交于 2019-11-26 17:51:07
魔法方法 : 关于魔法方法,其实是有比较多的,但我现在接触的最多的莫过于“构造函数”了,而在之前的文章中同样对于该函数有过介绍,这次主要是将我对这个知识点的一个困惑写出来,希望能对有相同困惑的读者提供一点点帮助,也是为自己做下记录。 1、子类继承父类(也就是在class B(A))之后,没有重写父类的构造函数,那么也不需要在子类中重新对父类的构造函数重新初始化了,就像我的第一张截图上所定义的子类,其中没有任何的初始化函数,但是子类的实例依然完成了父类构造函数的初始化。 2、子类继承父类后,自己重写了构造函数,这个时候就要在子类的构造函数中重新对父类的构造函数进行初始化,不然子类的实例只会对子类的构造函数进行初始化,而不会对父类的构造函数进行初始化。 总的来说 ,若是子类没有重写构造函数,那么子类的实例就会直接初始化父类的构造函数;若是子类重写了构造函数,就相当于对父类的构造函数进行了覆盖,若想初始化父类的构造函数,就必须要在子类的构造函数中再进行定义 这是因为我在之前总是以为,当子类继承了父类之后,其中的属性和方法均完全继承过来,所以我在看到重写子类构造函数时候还要再重新对父类的构造函数进行初始化感到困惑。 生成器&迭代器 : 生成器 关于生成器,不知道大家是否还记得我之前文章中介绍的列表推导式,而我们不管是使用列表推导式还是循环的方式,都是直接生成全部的列表

python itertools 模块讲解

两盒软妹~` 提交于 2019-11-26 17:43:21
1、介绍 itertools 是python的迭代器模块,itertools提供的工具相当高效且节省内存。 使用这些工具,你将能够创建自己定制的迭代器用于高效率的循环。 - 无限迭代器  itertools包自带了三个可以无限迭代的迭代器。这意味着,当你使用他们时,你要知道要的到底是最终会停止的迭代器,还是需要无限地迭代鞋去。 (1)count(初值=0, 步长=1) :count 迭代器会返回从传入的起始参数开始的均匀间隔的数值。count 也可以接收指定的步长参数。我们来看一个简单的例子: ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' >>> from itertools import count >>> for i in count(10): #从10开始无限循环 ... if i > 20: ... break ... else: ... print(i) ... 10 11 12 13 14 15 16 17 18 19 20 (2)islice(count(10), 5) :从 10 开始,输出 5 个元素后结束。islice 的第二个参数控制何时停止迭代。但其含义并不是”达到数字 5 时停止“,而是”当迭代了 5 次之后停止“。 >>>

STL MAP 详解 (zz)

耗尽温柔 提交于 2019-11-26 17:40:56
STL MAP 详解 (zz) 原文链接: http://www.cppblog.com/MiYu/archive/2010/08/25/124656.html 由于STL是一个统一的整体,map的很多用法都和STL中其它的东 西结合在一起;map中由于它内部有序,由红黑树保证,因此很多函数执行的时间复杂度都是log2N的,如果用map函数可以实现的功能,而STL Algorithm也可以完成该功能,建议用map自带函数,效率高一些……Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字 的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一 颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。下面举例说明什么是一对一的数据映射。比如一个班级中,每个学生的学号跟他的姓名就存在着一一映射的关系,这个模型用map可能轻易描述,很明显学 号用int描述,姓名用字符串描述(本篇文章中不用char *来描述字符串,而是采用STL中string来描述), 下面给出map描述代码:Map<int, string> mapStudent; 1.

spark shuffle写操作三部曲之SortShuffleWriter

牧云@^-^@ 提交于 2019-11-26 17:39:54
提出问题 1. shuffle过程的数据是如何传输过来的,是按文件来传输,还是只传输该reduce对应在文件中的那部分数据? 2. shuffle读过程是否有溢出操作?是如何处理的? 3. shuffle读过程是否可以排序、聚合?是如何做的? 。。。。。。 概述 在 spark shuffle的写操作之准备工作 中的 ResultTask 和 ShuffleMapTask 看到了,rdd读取数据是调用了其 iterator 方法。 计算或者读取RDD org.apache.spark.rdd.RDD#iterator源码如下,它是一个final方法,只在此有实现,子类不允许重实现这个方法: 思路:如果是已经缓存下来了,则调用 org.apache.spark.rdd.RDD#getOrCompute 方法,通过底层的存储系统或者重新计算来获取父RDD的map数据。否则调用 org.apache.spark.rdd.RDD#computeOrReadCheckpoint ,从checkpoint中读取或者是通过计算来来获取父RDD的map数据。 我们逐一来看其依赖方法: org.apache.spark.rdd.RDD#getOrCompute 源码如下: 首先先通过Spark底层的存储系统获取 block。如果底层存储没有则调用 org.apache.spark.rdd.RDD

PL真有意思(四):控制流

我只是一个虾纸丫 提交于 2019-11-26 13:06:34
前言 对大多数计算模型而言,顺序都是基本的东西,它确定了为完成所期望的某种工作,什么事情应该最先做,什么事应该随后做,我们可以将语言规定顺序的机制分为几个类别: 顺序执行 选择 迭代 过程抽象 递归 并发 异常处理和推断 非确定性 对于不同类别的语言对不同类别的控制流的重要性也不尽相同,比如顺序执行相比于函数式对于命令式则更加重要。而命令式中更倾向用迭代,函数则更强调递归 表达式求值 在讨论控制流之前先讨论下表达式的问题,先明确两个概念:运算符通常是指那些采用特殊语法形式的内部函数(比如+-*/等),运算对象指的是运算符的参数(如2+3,2和3就是运算对象),那么运算符和运算对象的组合就是表达式。一般根据运算符出现的位置(相对于运算对象而言),可以分为3类表示形式:前缀、中缀和后缀。比如Lisp就运用前缀语法: (+ 1 3 4 6) (* (+ 1 7) 8) 大多数命令式语言对二元运算符都使用中缀记法,而对一元运算符和其它函数使用前缀激发。但是像Lisp就全部统一使用中缀记法 优先级和结合性 大多数程序设计语言都提供丰富的内部算术。在用中缀方式(没有括号)写出就可能出现歧义。所以就需要优先级和结合性来解决歧义性,但是我觉得 妈的你写括号就完事儿了 而且不同语言的优先级和结合性也不尽相同 赋值 在纯函数式语言中,程序的基本组成部分是表达式,计算也仅是对表达式求值

迭代器

独自空忆成欢 提交于 2019-11-26 12:45:18
在介绍迭代器之前,先说明下迭代的概念: 迭代:通过for循环遍历对象的每一个元素的过程。 Python的for语法功能非常强大,可以遍历任何可迭代的对象。 在Python中,list/tuple/string/dict/set/bytes都是可以迭代的数据类型。 可以通过collections模块的Iterable类型来判断一个对象是否可迭代: >>> from collections import Iterable >>> isinstance('abc', Iterable) # str是否可迭代 True >>> isinstance([1,2,3], Iterable) # list是否可迭代 True >>> isinstance(123, Iterable) # 整数是否可迭代 False 迭代器 迭代器是一种可以被遍历的对象,并且能作用于next()函数。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往后遍历不能回溯,不像列表,你随时可以取后面的数据,也可以返回头取前面的数据。迭代器通常要实现两个基本的方法: iter() 和 next() 。 字符串,列表或元组对象,甚至自定义对象都可用于创建迭代器: >>> lis=[1,2,3,4] >>> it = iter(lis) # 使用Python内置的iter()方法创建迭代器对象 >>

函数名 迭代器 任意表达式 插入表达式 等操作

徘徊边缘 提交于 2019-11-26 12:31:40
函数名的作用 1.函数名的内存地址 def func(): print("呵呵") print(func) 结果: <function func at 0x1101e4ea0> 2.函数名可以赋值给其他变量 def func(): print("呵呵") print(func) a = func # 把函数当成一个值赋值给另一个变量 a() # 函数调用 func() 结果: 呵呵 <function func at 0x0000025089261E18> 3.函数名可以当做容器类的元素 def func1(): print("呵呵") def func2(): print("呵呵") def func3(): print("呵呵") def func4(): print("呵呵") lst = [func1, func2, func3] for i in lst: i() 结果: 呵呵 呵呵 呵呵 4.函数名可以当做函数的参数 def func(): print("吃了么") def func2(fn): print("我是func2") fn() # 执行传递过来的fn print("我是func2") func2(func) # 把函数func当成参数传递给func2的参数fn. 结果: 我是func2 吃了么 我是func2 5.函数名可以作为函数的返回值 def func

Python 迭代器,生成器

落爺英雄遲暮 提交于 2019-11-26 12:06:08
一 、复习# 函数 # 函数的定义和调用 # def 函数名(形参): # 函数体 # return 返回值 # 站在形参的角度上:位置参数,*args,默认参数(陷阱),**kwargs # 站在寮参的角度上:按照位置传,按照关键字传 # 返回值:没有返回值 返回一个值 返回多个值 # 接收返回值:没有返回值不接收,返回一个值用一个变量接收,返回多值用一个变量或者对应数目的变量接收# 闭包函数 -----在内部函数引用外部函数的变量# 装饰器 ----》装饰器一定是闭包函数# 装饰器作用:在不改变原来函数的调用方式的情况下,在这个函数前后添加新的功能 #完美的符合了一个开发原则:开放封闭原则 # 对扩展是开放的 # 对修改是封闭的 # 基础的装饰器 # from functools import wraps # def wrapper(func): # @warps(func) # def inner(*args,**kwargs): # '''在函数被调用之前添加的代码''' # ret = func(*args,**kwargs) #func 是被装饰的函数 在这里被调用 # '''在函数被调用之后添加的代码''' # return ret # return inner #使用------- @wrapper # 完美的装饰器 # from functools import

Prototype之详细解说[转]

江枫思渺然 提交于 2019-11-26 11:54:12
/* Prototype JavaScript framework, version 1.4.0 * (c) 2005 Sam Stephenson <sam@conio.net> * * Prototype is freely distributable under the terms of an MIT-style license. * For details, see the Prototype web site: http://prototype.conio.net/ * 这是一个JavaScript的框架,致力于简化动态的Web开发,完全按照面对对象的思想 * 进行Javascript开发,添加了迭代器的概念增强Javascript的设计能力。 * Prototype框架构思独特充满了技巧性的代码,方便易用的工具类! * /*-------------------------------------------------------------------------- */ /* 【Prototype】定义一个全局对象,提供一个全局的基本信息和工具 */ var Prototype = { Version: ' 1.4.0 ' , // 可以作为版本检测用 // 用于脚本检测的正则表达式,经常使用所以放在这里起到全局常量的作用 ScriptFragment: ' (?