迭代器

day4

此生再无相见时 提交于 2019-11-29 21:05:47
阅读目录 函数名的本质 闭包 装饰器 迭代器和生成器 迭代器 生成器函数 生成器表达式 匿名函数 递归函数 内置函数 回到顶部 函数名的本质 函数名本质上就是函数的内存地址 1.可以被引用 def func(): print('in func') f = func print(f) View Code 2.可以被当作容器类型的元素 def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') l = [f1,f2,f3] d = {'f1':f1,'f2':f2,'f3':f3} #调用 l[0]() d['f2']() 函数被当作容易类型的元素 3.可以当作函数的参数和返回值 第一类对象(first-class object)指 1.可在运行期创建 2.可用作函数参数或返回值 3.可存入变量的实体。 第一类对象 *不明白?那就记住一句话,就当普通变量用 回到顶部 闭包函数 def func(): name = 'eva' def inner(): print(name) 闭包函数定义: 内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数 #函数内部定义的函数称为内部函数 由于有了作用域的关系,我们就不能拿到函数内部的变量和函数了。如果我们就是想拿怎么办呢?返回呀!

Python函数编程——迭代器

回眸只為那壹抹淺笑 提交于 2019-11-29 19:40:34
Python函数编程——迭代器 我们已经知道,可以直接作用于 for 循环的数据类型有以下几种: 1、类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等; 2、一类是 generator ,包括生成器和带 yield 的generator function。 这些可以直接作用于 for 循环的对象统称为 可迭代对象:Iterable,可迭代的意思就是可遍历、可循环。 可以使用 isinstance() 判断一个对象是否是 Iterable 对象: >>> from collections import Iterable >>> isinstance([], Iterable) True >>> isinstance({}, Iterable) True >>> isinstance('abc', Iterable) True >>> isinstance((x for x in range(10)), Iterable) True >>> isinstance(100, Iterable) False 而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。 生成器都是

PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)

跟風遠走 提交于 2019-11-29 19:09:06
前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. list这种序列类的一大特点:切片。和如何实现可切片对象。到如何自定义一个序列类。 5. biset维护排序序列 6. 什么时候使用list 7.列表推导式、生成器表达式、字典推导式 1.python中的序列类分类 a.什么是python的序列类? 之前提到的魔法函数这种时候就很重要啦。满足序列类相关的协议就称为python里的序列类。python内置的序列类有dict、tuple、list等。 而我们自定义序列类的话,由于魔法函数的存在。序列的相关魔法方法允许我们自己创建的类拥有序列的特性,让其使用起来就像 python 的内置序列。 b.python按分类来看有哪些序列类? - 容器序列:list,tuple,deque(可以放任意的类型的容器) - 扁平序列:str,bytes,bytearray,array.array(可以使用 for循环遍历的) - 可变序列:list,deque,bytearray,array - 不可变:str,tuple,bytes ps.这里推荐一本书 fluent python Python标准库提供了大量使用C来实现的序列类型,

iter( )函数

半腔热情 提交于 2019-11-29 17:14:40
iter() 函数用来生成迭代器。 iter(object[, sentinel]) 参数 object – 支持迭代的集合对象。 sentinel – 如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object。 返回值: 迭代器对象。 >> > lst = [ 1 , 2 , 3 ] >> > for i in iter ( lst ) : . . . print ( i ) . . . 1 2 3 >> > l = [ 2 , 3 , 4 ] >> > iterl = iter ( l ) >> > iterl . next ( ) 2 >> > iterl . next ( ) 3 >> > iterl . next ( ) 4 >> > iterl . next ( ) Traceback ( most recent call last ) : File "<stdin>" , line 1 , in < module > StopIteration 来源: https://blog.csdn.net/HHG20171226/article/details/100861117

可迭代对象、迭代器和生成器

那年仲夏 提交于 2019-11-29 14:59:12
迭代(Iteration) ​ 当我们使⽤⼀个循环来遍历某个东西时,这就叫⼀个迭代。 可迭代对象(Iterable) ​ ⼀个可迭代对象是Python中任意的对象,只要它定义了可以返回⼀个迭代器的 __iter__ ⽅法,或者定义了可以⽀持下标索引的 __getitem__ ⽅法。简单说,⼀个可迭代对象,就是任意的对象,只要它能给我们提供⼀个迭代器。 container__iter__() 返回一个迭代器对象 。 该对象需要支持迭代器协议。 如果容器支持不同的迭代类型,则可以提供额外的方法来专门地请求不同迭代类型的迭代器。 迭代器(Iterator) ​ ⼀个迭代器是任意⼀个对象,只要它定义了⼀个next(Python2) 或者 __next__ ⽅法。 iterator.__next__() 从容器中返回下一项。 如果已经没有项可返回,则会引发 StopIteration 异常。 特点: 节省内存,惰性机制,不能反复, 只能向下执行. 迭代器是可迭代的,所有的迭代器都是它们自己的迭代器 迭代器没有长度,它们不能被索引 可以把迭代器看作是 惰性迭代器 ,它们是 一次性使用 ,这意味着它们只能循环遍历一次。 文件迭代器 #手动遍历 f = open('xxx','r',encoding='utf8') f.readline() #每次调用readine方法,就会到下一列

python 函数

随声附和 提交于 2019-11-29 13:58:46
函数 简介 ​ 函数是组织好的,可重复使用的,用来实现,单一或相关联的功能 ​ 函数能提高模块的利用行,和代码的重复利用率以及冗余,其实你已经使用了很多的Python函数,比如print()。 ​ 但是你也可以自己创建函数,这种叫做自定义函数 函数规则 函数代码块必须以def 关键字开头,后面为函数标识符名以及() 任何传入的参数和自定变量必须放在圆括号中间。圆括号之间可以用来定义参数 函数的第一行语句可以选择性的使用注释字符来表明函数的作用及说明 函数的内容以冒号起始,并且必须缩进 return [表达式] 结束函数,选择性的返回一个值给调用该函数方。不带表达式的函数默认会返回 None 语法 #语法 def functionname( parameters ): "函数_文档字符串" function_suite return [expression] #实例 def printme( str ): "打印传入的字符串到标准显示设备上" print(str) return 默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。 函数调用 定义一个函数只能给函数一个名称,指定函数里包含的参数,和代码块结构 函数基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从python提示符执行 #!/usr/bin/python # -*- coding: UTF-8 -

c++之迭代器

流过昼夜 提交于 2019-11-29 11:33:56
一、迭代器简介 迭代器是一种遍历容器内元素的数据类型,类似于指针。迭代器是用来指向容器内的某一个元素。 如:string、vector都可以用[]进行访问,但更常用的访问方式是使用迭代器进行访问。 通过迭代器可以读取、修改指向的容器内的元素。 常用的容器还有list、map,c++都有对应的迭代器。 二、容器的迭代器类型 vector<int> iv = {100,200,300}; vector<int>::iterator iter; // 定义迭代器 三、迭代器相关操作 //begin() end()操作一般返回迭代器类型,反向迭代器rbegin()/rend(); vector<int> iv={100,200,300}; vector<int>::iterator iter; // 定义迭代器 iter = iv.begin(); //如果容器有元素,返回的迭代器指向第一个元素 iter = iv.end(); //指向末端元素的后边,为无效数据//如果一个容器为空,则begin()和end()返回的迭代器相同,起到标记的作用。 vector<int> iv={100,200,300}; // 使用正向迭代器 for(vector<int>::iterator iter = iv.begin(); iter != iv.end(); iter++){  cout <<

生成器和迭代器

岁酱吖の 提交于 2019-11-29 11:30:18
列表生成式     >>> a = [i+1 for i in range(10)]     >>> a     [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]     循环 range(10) 生成一个列表,这就是列表生成器        这个range() 函数可创建一个整数列表        python2 : /*--> */ /*--> */         >>> print(range(10))         [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]     python3 : /*--> */ /*--> */         >>> print(range(10))         range(0, 10)             以上可见python2中,等于是创建了两个列表,比python3中,增加了内存消耗,python3中的优化        生成器generator       由上可知在python2中,创建一个包含100万个元素的列表,不仅占用很大的存储空间,     如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。比如我要循环100万次,     按py的语法,for i in range(1000000)会先生成100万个值的列表。但是循环到第50次时,     我就不想继续了

TensorFlow读写数据

ぃ、小莉子 提交于 2019-11-29 10:45:44
前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star: https://github.com/ZhongFuCheng3y/3y 回顾前面: 从零开始学TensorFlow【01-搭建环境、HelloWorld篇】 什么是TensorFlow? 众所周知,要训练出一个模型,首先我们得有数据。我们第一个例子中,直接使用dataset的api去加载mnist的数据。(minst的数据要么我们是提前下载好,放在对应的目录上,要么就根据他给的url直接从网上下载)。 一般来说,我们使用TensorFlow是从TFRecord文件中读取数据的。 TFRecord 文件格式是一种面向记录的简单 二进制格式 ,很多 TensorFlow 应用采用此格式来训练数据 所以,这篇文章来聊聊怎么 读取 TFRecord文件的数据。 一、入门对数据集的数据进行读和写 首先,我们来体验一下怎么造一个TFRecord文件,怎么从TFRecord文件中读取数据,遍历(消费)这些数据。 1.1 造一个TFRecord文件 现在,我们还没有TFRecord文件,我们可以自己简单写一个: def write_sample_to_tfrecord(): gmv_values = np.arange(10) click_values = np.arange(10) label_values = np

JAVA集合中的迭代器的遍历

不羁岁月 提交于 2019-11-29 10:33:14
JAVA中的迭代器,迭代实质上就是遍历,在JAVA中使用iterator()方法进行迭代。需要注意的是,iterator()方法的返回值是Iterator对象。Iterator对象有三个方法,hasNext(),next(),remove(). 代码: public static void main(String[] args) { // TODO Auto-generated method stub Collection c=new ArrayList(); c.add(new Student("kj",12)); c.add(new Student("uj",13)); c.add(new Student("tj",15)); c.add(new Student("cj",14)); // Object[]ob= c.toArray();//将集合转换为数组 // // for(int i=0;i<ob.length;i++){ // Student s=(Student)ob[i]; // System.out.println(s.getName()+"..."+s.getAge()); // } Iterator it=c.iterator(); while(it.hasNext()){ Student s=(Student)it.next(); // System.out