迭代器

从迭代器到递归

…衆ロ難τιáo~ 提交于 2019-11-30 10:28:41
迭代器 迭代器并不是函数,只是一个称呼而已 python中一切皆对象(数据类型) 可迭代对象:含有 __iter__ 方法的数据类型就叫做可迭代对象 python中除了数字类型,多有数据类型都是可迭代对象 迭代器对象 迭代器对象就是含有 __iter__ 和 __next__ 方法的对象 为什么要有迭代器对象:提供了不依赖索引取值的手段 for循环原理(for循环本质就是一个while循环,只不过是一个一定可控的while循环) 可迭代对象 可迭代对象:含有 __iter__ 方法叫做可迭代对象--》除了数字类型都是可迭代对象--》可迭代对象使用 __iter__ 变成迭代器 迭代器对象 迭代器对象:含有 __iter__ 和 __next__ 方法叫做迭代器对象--》只有文件时迭代器对象--》迭代器使用 __iter__ 依然是迭代器 可迭代对象不一定是迭代器对象;迭代器对象一定是可迭代对象。 三元表达式 顾名思义就是只能赚三块钱的表达式 这只是程序员装逼用的代码,实际上不大会使用 x=10 y=20 print(x) if x>y else print(y) 如果条件成立则走这里,if条件else条件不成立走这里 列表推导式 lt=[i**2 for i in range(10)] # ↑这里是可以变的 print(lt) 字典生成式 lt1 = ['a', 'b', 'c']

day13

妖精的绣舞 提交于 2019-11-30 10:27:08
目录 迭代器 三元表达式 列表推导式 字典生成式 生成器 生成器生成式 递归 迭代器 迭代器:不是函数,只是一个称呼而已 python中一切皆对象 为什么要有迭代器对象:提供了不依赖于索引取值的手段,只有字符串和列表都是依赖索引取值的,其他的可迭代对象都是无法依赖索引取值的 for循环原理:for循环本质就是一个while循环,只不过是一个一定可控制的while循环 可迭代器对象:含有-iter-方法叫做可迭代对象,除了数字类型都是可迭代对象,可迭代对象使用-iter-变成迭代器 迭代器对象:含有-iter-和-next-方法的叫做迭代器对象,只有文件是迭代器对象,迭代器使用-iter-依然是迭代器 可迭代对象不一定是迭代器对象;迭代器对象一定是可迭代对象 总结:可迭代的对象:Python内置str、list、tuple(元组)、dict、set(集合)、file s='hello' iter_s = s._iter_() while True: try: print(iter_s.next_()) except StopIteration break h e l l o 迭代器对象:执行可迭代对象的—iter—方法,拿到的返回值就是迭代器对象 特点: 内置—next—方法,执行该方法会拿到迭代器对象中的一个值 内置有—iter—方法,执行该方法会拿到迭代器本身 ​

day13 学习小结

冷暖自知 提交于 2019-11-30 10:25:57
目录 一、迭代器 1.可迭代对象 2.迭代器对象 二、三元表达式 三、列表推导式 四、字典生成式 1.zip方法 五、生成器表达式 六、生成器 1.yield的特性 七、递归 1.递归的要求 一、迭代器 迭代器是一种函数,只是一种称呼而已 1.可迭代对象 含有.__iter__方法的对象就叫做可迭代对象 x = 10 # 不是可迭代对象 s = 'abc' s.__iter__() lt = [1, 2, 3] lt.__iter__() tup = (1,) tup.__iter__() dic = {'a': 1} dic.__iter__() se = {1} se.__iter__() fw = open('test.txt', 'a+', encoding='utf8') fw.seek(0, 0) fw.__iter__() 可见,除了数字类型和布尔类型,其余数据类型都是可迭代对象。 2.迭代器对象 含有.__iter__和.__next__方法的对象就是迭代器对象 为什么要有迭代器对象:提供了一种 不依赖索引取值的手段 dic = {'a': 1, 'b': 2, 'c': 3} print(dic_iter.__next__()) # 迭代取值 --》 基于上一个值 print(dic_iter.__next__()) print(dic_iter.__next__

可迭代对象和迭代器

我与影子孤独终老i 提交于 2019-11-30 10:25:05
可迭代对象 可以通过迭代一次次返回==不同元素==的对象 所谓相同,指的是元素在容器中是否为同一个,但是值可以相同, 可以迭代,但未必有序,未必可索引 list,tuple,string,bytse,bytearray,range,set,dict,生成器等 可以使用成员运算符in,not in 本质上就在遍历对象 迭代器 特殊的对象,一定是可迭代对象,具备可迭代对象特征 可以通过__iter__方法把一个可迭代对象封装成迭代器 可以通过next方法,迭代 迭代器对象 生成器对象,是迭代器对象 来源: https://www.cnblogs.com/agsol/p/11578656.html

Python-生成器与迭代器

不打扰是莪最后的温柔 提交于 2019-11-30 10:20:01
目录 迭代器 可迭代对象 迭代器对象 为什么有迭代器对象 for循环原理 总结 三元表达式 列表推导式 字典生成式 zip()函数 生成器 yield的特性 range函数实现 递归函数 递归条件 迭代器 什么是迭代器? 迭代器:迭代的工具 可迭代对象 python找那个一切皆对象 对与这一切的对象,但凡有 __iter__ 方法的都是可迭代对象 # x = 1.__iter__ # SyntaxError: invalid syntax # 以下数据类型都是可迭代的对象 name = 'qinyj' lis = [1, 2] tup = (1, 2) dic = {'name': 'nick'} s1 = {'a', 'b'} f = open('49w.txt', 'w', encoding='utf-8') f.__iter__ 除数字数据类型外都是可迭代对象 迭代器对象 对与这一切的对象,但凡有 __iter__ 和 __next__ 方法的都是迭代器对象 # 只有文件才是迭代器对象 f = open("user.txt","r") print(f.__iter__()) print(f.__next__()) 对于可迭代对象,我们可以变成迭代器对象 dic = {'a': 1, 'b': 2, 'c': 3} dic_iter = dic.__iter__() print

day13

放肆的年华 提交于 2019-11-30 10:19:00
迭代器: 迭代器指的是迭代取值的工具,迭代是指一个重复的过程,每一次重复都是基于上一次结果而来   迭代提供了一种通用的不依赖索引的迭代取值方式   一.可迭代对象     但凡内置有__iter__方法的对象,都称为可迭代对象,可迭代的对象:str,list,tuple,dict,set,文件对象   二.迭代器对象     1既内置又__next__方法的对象,执行该方法可以不依赖索引取值     2.又内置有__iter__方法的对象,执行迭代器的__iter__方法得到的依然是迭代器本身     迭代器一定是可迭代对象,可迭代对象不一定是迭代器对象,文件对象本身就是一个迭代器对象   例如:执行可迭代对象下的__iter__方法,返回一个迭代器对象,在通过迭代器对象的__next__方法取值,如果取值次数超过源值的数量就会报错   for循环本质为迭代器循环   工作原理:     1.先调用in后对象的 iter 方法,将其变成一个迭代器对象     2.调用next(迭代器),将得到的返回值赋值给变量名     3.循环往复直到next(迭代器)抛出异常,for会自动捕捉异常然后结束循环    ps:可以从for的角度,分辨但凡可以被for循环取值的对象就是可迭代对象   迭代器优点:     1.提供了一种通用不依赖索引的迭代取值方式     2

面试(五)

北城余情 提交于 2019-11-30 07:16:46
Java集合类框架的最佳实践有哪些? 元素的大小是固定的,而且能事先知道,用Array而不是ArrayList。 如果能估计出存储的元素的数目,可以设置初始容量来避免重新计算hash值或者是扩容。 为了类型安全,可读性和健壮性的原因多使用泛型。同时,使用泛型还可以避免运行时的ClassCastException。 使用JDK提供的不变类(immutable class)作为Map的键可以避免为我们自己的类实现hashCode()和equals()方法。 底层的集合实际上是空的情况下,返回长度是0的集合或者是数组,不要返回null。 Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。 集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类。 (2)随着使用经过严格测试的集合框架类,代码质量会得到提高。 (3)通过使用JDK附带的集合类,可以降低代码维护成本。 (4)复用性和可操作性。 集合框架中的泛型有什么优点? Java1.5引入了泛型

理解迭代器和可迭代对象

偶尔善良 提交于 2019-11-30 06:28:05
前言: 之前在迭代器、可迭代对象这一部分一直有些混淆,结合一些资料,表达我对这些概念的理解,未必都对,但是适合刚开始入手的朋友们从零开始理解 开门见山首先介绍可迭代对象和迭代器的通俗理解   迭代器就是能被next()调用得到下一次迭代值的对象,迭代器不直接保存迭代的序列值,而保存得到下一次迭代值的算法   可迭代对象就是能被iter()方法调用得到迭代对象的对象,只有可迭代对象才可用于for循环 for循环的底层实现原理:   以下是一个for循环的格式   for i in 可迭代对象: 循环体   实质是调用内建方法iter()得到迭代器对象,然后通过每次调用next(迭代器)得到i的迭代值   例如以下的代码: for i in x: print(i)   完全可以改写为: iterator = iter(x) while True: i = next(iterator) print(i) 从严格或者底层原理来说   迭代器或迭代器对象:实现了__next__()魔法方法的(类所实例化的)对象,该方法返回迭代器下一个值   可迭代对象:实现了__iter__()魔法方法的(类所实例化的)对象,该方法返回一个迭代器对象    实际上,next和iter是对__next__和__iter__的进一步封装或者说next和iter在执行的时候又分别调用了内部的__next__和_

C++——STL

守給你的承諾、 提交于 2019-11-30 05:48:56
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/lggbxf/article/details/90668253 C++——STL 六大组件 容器 算法 迭代器 仿函数 适配器 空间配置器 STL的三大组件 容器 算法 迭代器 长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用的东西”的方法,让程序员的心血不止于随时间的迁移,人事异动而烟消云散,从函数(functions),类别(classes),函数库(function libraries),类别库(class libraries)、各种组件,从模块化设计,到面向对象(object oriented ),为的就是复用性的提升。 为了建立数据结构和算法的一套标准,并且降低他们之间的耦合关系,以提升各自的独立性、弹性、交互操作性(相互合作性,interoperability),诞生了STL 六大组件 STL提供了六大组件,彼此之间可以组合套用,分别是:容器、算法、迭代器、仿函数、适配器、空间配置器。 容器 各种数据结构,如vector、list、deque、set、map等,用来存放数据,从实现角度来看,STL容器是一种class template 算法 各种常用的算法,如sort、find

迭代器和生成器的用法

 ̄綄美尐妖づ 提交于 2019-11-30 05:41:12
首先在了解解析式之前,我们先来看一个列子:一个列表,元素是0-9,列表中的每个值自增1,该如何实现: 方法一:遍历列表,对其元素进行加1操作后放到一个新的列表中 1 lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 3 for index, i in enumerate(lst): 4 lst[index] += 1 5 print(lst) 方法二:通过map函数来实现 a = map(lambda x:x+1, lst) print(a) for x in a: print(x) 方法三:通过列表解析式,一行搞定 1 lst2 = [x+1 for x in lst] 2 print(lst2)   方法三就是列表解析式的写法,返回一个新的列表。   那么什么是生成器呢?通过列表解析式我们可以发现,它会直接创建一个新的列表,这样不好的地方就是占用内存,我们知道内存是有限的,如果列表中的元素有几百万,而有时候就仅仅需要个别的数据,那么就会大大浪费内存的空间。   所以,我们是否可以想一种办法来解决这个问题呢?在Python中,生成器就很好的解决了这个问题。我们可以假设列表中的元素能否通过某种算法来推算出来呢?在需要某个数据的时候通过计算来得到这个数据,这样就不会直接生成一个列表来存储许多无用的数据了。在python中,这种一边循环一边计算的机制