迭代器

Python基础 三器 (装饰器&生成器&迭代器)

时间秒杀一切 提交于 2020-02-27 18:51:39
一. 装饰器 1、装饰器的作用 - 1.装饰器作用: 本质是函数(装饰其他函数)就是为其他函数添加其他功能 装饰器必须准寻得原则: 1)不能修改被装饰函数的源代码 2)不能修改被装饰函数的调用方式 2.实现装饰器知识储备: 1)函数即“变量” 2)高阶函数 3)嵌套函数 高阶函数+潜逃函数=》装饰器 2、使用高阶函数模仿装饰器功能 1)定义:把一个函数名当做实参传给另一个函数 2)返回值中包含函数名 3)下面使用高阶函数虽然可以实现装饰器的一些功能,但是违反了装饰器不能改变调用方式的原则,以前使用bar()现在将调用方式改编成了test1(bar)就是将bar的函数名当做变量传给了test1() #! /usr/bin/env python # -*- coding: utf-8 -*- import time def timer ( func ) : start_time = time . time ( ) func ( ) print '函数执行时间为' , time . time ( ) - start_time def test ( ) : print '开始执行test' time . sleep ( 3 ) print 'test执行结束' timer ( test ) ''' 开始执行test test执行结束 函数执行时间为 3.00332999229 ''' 4

迭代器模式

99封情书 提交于 2020-02-27 08:27:22
迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部. 1.Iterator Java提供一个专门的迭代器<<interface>>Iterator,我们可以对某个序列实现该interface,来提供标准的Java迭代器。Iterator接口实现后的功能是“使用”一个迭代器. 文档定义: [java] view plain copy Package java.util; public interface Iterator<E> { boolean hasNext(); //判断是否存在下一个对象元素 E next(); void remove(); } 2.Iterable Java中还提供了一个Iterable接口,Iterable接口实现后的功能是“返回”一个迭代器,我们常用的实现了该接口的子接口有: Collection<E>, Deque<E>, List<E>, Queue<E>, Set<E> 等.该接口的iterator()方法返回一个标准的Iterator实现。实现这个接口允许对象成为 Foreach 语句的目标。就可以通过Foreach语法遍历你的底层序列。 Iterable接口包含一个能够产生Iterator的iterator()方法

STL算法积累(二)

做~自己de王妃 提交于 2020-02-26 23:02:21
C++ sort stable_sort partial_sort nth_element is_sorted is_sorted_until [1]C++ sort(STL sort)排序算法详解 //默认升序 1.1 在很多应用中,排序都是至关重要的,而且很多 STL 算法也只适用于有序对象序列。定义在 algorithm 头文件中的函数模板 sort<Iter>() 默认会将元素段排成升序,这也就意味着 排序的对象的类型需要支持 < 运算符。 1.2 对象也必须是可交换的,这说明可以用定义在 utility 头文件中的函数模板 swap() 来对两个对象进行交换。这进一步表明这种对象的类型需要实现移动构造函数和移动赋值运算符。 1.3 函数模板 sort<Iter>() 的类型参数 Iter 是元素段元素对应的迭代器类型,而且它们必须支持随机访问迭代器。这表明 sort() 算法只能对提供随机访问迭代器的容器中的元素进行排序, 也说明 sort() 只能接受 array、vector、deque 或标准数组中的元素。可以回顾前面章节,list 和 forward_list 容器都有成员函数 sort(); 这些用来排序的特殊成员函数是必要的, 因为 list 只提供双向迭代器,且 forward_list 只提供正向迭代器。 可以从函数调用的参数中推导出 sort()

C++单循环链表(迭代器版)

天大地大妈咪最大 提交于 2020-02-26 15:35:39
1 #ifndef _LIST_H_ 2 #define _LIST_H_ 3 //虚基类 4 template<class ElemType> 5 class List 6 { 7 public: 8 List() {}; 9 virtual ~List() {}; 10 virtual void Clear() = 0;//清空数据结构 11 virtual void Insert(const int& i, const ElemType& X) = 0;//插入元素 12 virtual void ReMove(const int &i) = 0;//移除指定位置的元素 13 virtual void Erase(const ElemType& X) = 0;//删除表中所有X元素 14 virtual int Search(const ElemType& X) const = 0;//搜索某个元素 15 virtual void Traverse() const = 0;//遍历数据结构 16 virtual ElemType Visit(const int& i)const = 0;//访问某个元素 17 }; 18 #endif // !_LIST_H_ List.h 1 #ifndef __SCYCLISTLIST_H__ 2 #define _

day-14带参装饰器、迭代器

依然范特西╮ 提交于 2020-02-26 11:15:05
带参装饰器 通常,装饰器为被装饰的函数添加新功能,需要外界的参数    -- outer参数固定一个,就是func   -- inner参数固定同被装饰的函数,也不能添加新参数   -- 可以借助函数的嵌套定义,外层给内层传参 def wrap(info): def outer(func): # info = 0 def inner(*args, **kwargs): print('新:拓展的新功能,可能也需要外界的参数%s' % info) res = func(*args, **kwargs) return res return inner return outer @wrap('外部参数') def fn(): pass # 系统的wraps带参装饰器:改变inner的假指向,本质外界使用的还是inner,但是打印显示的是wraps中的函数 from functools import wraps def outer(func): @wraps(func) def inner(*args, **kwargs): res = func(*args, **kwargs) return res return inner @outer def fn(): pass 迭代器 迭代器:循环反馈的容器(集合类型)   -- 不同于索引取值,但也可以循环的从容器对象中从前往后逐个返回内部的值

python_day4

不羁的心 提交于 2020-02-26 11:03:03
目录: 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之迭代器 函数之生成器 内置函数 一、函数补充进阶    1、函数对象: 函数是第一类对象,即函数可以当作数据传递,它的应用形式也被称为高阶函数,函数的特性如下: a. 可以被引用 1 # def foo(): 2 # print('from foo') 3 # 4 # func = foo 5 # print(foo) # 不加括号为foo函数的内存地址 6 # print(func) # func指向foo内存地址 7 # func() # foo内存地址,加()执行 8 ''' 9 结果: 10 <function foo at 0x0000007D79483E18> 11 <function foo at 0x0000007D79483E18> 12 from foo 13 ''' View Code b. 可以当作参数传递 1 # def foo(): 2 # print('from foo') 3 # 4 # def bar(func): 5 # print(func) 6 # func() 7 # 8 # bar(foo) # foo函数内存地址被当作参数传递到bar函数中,并调用 9 10 ''' 11 结果: 12 <function foo at

迭代器模式

烂漫一生 提交于 2020-02-26 10:30:25
定义:提供一种方法,顺序访问聚合对象中的各个元素,而又不暴露其内部的表示。 类图 示例 public class Book { private String name; private String author; public Book(String name, String author) { this.name = name; this.author = name; } @Override public String toString() { return "[name:"+name+"\t author:"+author+"]"; } } //iterator public interface Iterator { boolean hasNext(); Object next(); } //ConcreteIterator public class BookArrayIterator implements Iterator { Book[] books; int position = 0; public BookArrayIterator(Book[] books){ this.books = books; } @Override public boolean hasNext() { if(position>=books.length){ return false; }

迭代器、生成器、面向过程编程

不打扰是莪最后的温柔 提交于 2020-02-26 09:11:44
1.迭代器 1.1 迭代的概念 #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不是迭代 print('===>') l=[1,2,3] count=0 while count < len(l): #迭代 print(l[count]) count+=1 1.2 为何要有迭代器?什么是可迭代对象?什么是迭代器对象? #1、为何要有迭代器? 对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器 #2、什么是可迭代对象? 可迭代对象指的是内置有__iter__方法的对象,即obj.__iter__,如下 'hello'.__iter__ (1,2,3).__iter__ [1,2,3].__iter__ {'a':1}.__iter__ {'a','b'}.__iter__ open('a.txt').__iter__ #3、什么是迭代器对象? 可迭代对象执行obj.__iter__()得到的结果就是迭代器对象 而迭代器对象指的是即内置有__iter__又内置有__next__方法的对象 文件类型是迭代器对象 open('a.txt').__iter__()

迭代器、生成器、面向过程编程

怎甘沉沦 提交于 2020-02-26 09:09:34
阅读目录 一 迭代器 二 生成器 三 面向过程编程 一 迭代器 一 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不是迭代 print('===>') l=[1,2,3] count=0 while count < len(l): #迭代 print(l[count]) count+=1 二 为何要有迭代器?什么是可迭代对象?什么是迭代器对象? #1、为何要有迭代器? 对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器 #2、什么是可迭代对象? 可迭代对象指的是内置有__iter__方法的对象,即obj.__iter__,如下 'hello'.__iter__ (1,2,3).__iter__ [1,2,3].__iter__ {'a':1}.__iter__ {'a','b'}.__iter__ open('a.txt').__iter__ #3、什么是迭代器对象? 可迭代对象执行obj.__iter__()得到的结果就是迭代器对象 而迭代器对象指的是即内置有__iter__又内置有__next_

可迭代对象,生成器,迭代器

大城市里の小女人 提交于 2020-02-26 02:33:11
可迭代对象 str,tuple,dict,list,set,bytes都为可迭代对象 range的结果是一个 range 对象,是一个可迭代对象 可迭代对象的本质: 在迭代一个可迭代对象的时候,实际上就是先获取该对象提供的一个迭代器,然后通过这个迭代器来依次获取对象中的每一个数据。 那么也就是说, 一个具备了_ _iter _ _方法的对象,就是一个可迭代对象。 迭代器 python中只要实现了 __iter__ 和 __next__ 方法的对象都可以称之为迭代器, _ _iter _ _() 方法返回一个特殊的迭代器对象,迭代器的 _ _ iter _ _() 返回⾃身, 这个迭代器对象实现了 _ _next _ _() 方法返回下一个值并通过 StopIteration 异常标识迭代的完成。 迭代器是一个带状态的对象,可以记录迭代的位置。 str / bytes / list / tuple / dict / set ⾃身不是迭代器,他 们⾃身不具备 _ _next _ _() , 但是具有 _ _iter _ _() , _ _iter _ _() ⽅法 ⽤来把⾃身转换成⼀个迭代器 In [ 1 ] : s = 'asdfghh' #字符串为可迭代对象 In [ 2 ] : si = s . __iter__ ( ) #调用__iter__()方法返回一个迭代器 In [ 3