python之迭代器、生成器与面向过程编程
目录
一、迭代器
1.迭代器的概念理解
- '''
- 迭代器从字面上理解就是迭代的工具。而迭代是每次的开始都是基于上一次的结果,不是周而复始的,而是不断发展的。
- '''
- l=[1,2,3,4]
- count=0
- while count<len(l):
- print(l[count])
- count+=1
2.可迭代对象与迭代器对象
- '''
- (1)可迭代对象:
- 可迭代对象就是内置__iter__方法的对象(再次重申,python中一切皆对象)。
- (2)迭代器对象就是内置有__iter__方法和__next__方法的对象。
- 可迭代对象执行了obj.__iter__()得到的结果就是迭代器对象,迭代器对象执行了obj.__iter__()得到的是迭代器本身。
- 要明确的一点是迭代器对象一定是可迭代对象,但是可迭代对象不一定是迭代器对象。
- '''
- #字符串
- string='hello world'
- iter_st=string.__iter__()
- while True:
- try:
- print(iter_st.__next__())
- except StopIteration:
- break
- #列表
- s=[1,3,4,5,'a']
- iter_s=s.__iter__()
- while True:
- try:
- print(iter_s.__next__())
- except StopIteration:
- break
- #字典
- dic={'a':1,'b':2}
- iter_dic=dic.__iter__()
- while True:
- try:
- print(iter_dic.__next__())
- except StopIteration:
- break
- #集合
- l={1,2,3,4,5}
- iter_l=l.__iter__()
- while True:
- try:
- print(iter_l.__next__())
- except StopIteration:
- break
实例说明
3.迭代器的优缺点:
- '''
- 优点:
- 1.提供了一种不依靠索引取值的迭代方式
- 2.执行一次.__next__()方法往内存读一条数据,节省内存
- 缺点:
- 1.无法用len(),甚至在数据读完之前都不会知道数据有多少
- 2.只能往后走,不能回退
- 3.一次性的
- '''
补充for循环
- with open('db.txt','r',encoding='utf-8') as f:
- for line in f:
- print(line)
- #执行in后的iter_f=f.__iter__()方法得到迭代器对象
- #执行iter_f.__next__(),将得到的值赋值给line,执行循环体代码
- #重复第二步,直到程序抛出StopIteration异常,结束循环
二、生成器
- '''
- 生成器就是迭代器。
- 当函数体内有yield时,那么函数名()的结果就是生成器,yield不会执行函数体代码而是保存函数的运行状态。
- '''
- def chicken():
- print('>>>1')
- yield 1
- print('>>>2')
- yield 2
- obj=chicken()#拿到生成器对象
- print(obj)#<generator object chicken at 0x000001B3FD8580A0>
- res=obj.__next__()#执行第一行,返回>>>1
- print(res)#1
- res2=obj.__next__()
- print(res2)
- res3=obj.__next__()#StopIteration
- def eat(name):
- print('%s ready to eat'%name)
- while True:
- food=yield
- print('%s start to eat %s'%(name,food))
- name=input('投喂对象>>>').strip()
- obj=eat(name)
- obj.__next__()
- food=input('食物>>>').strip()
- obj.send(food)
喂狗小程序
- def is_range(start,stop,step=1):
- n=start
- while n<stop:
- yield n
- n+=step
- for i in is_range(10):
- print(i)
- #小改动
- def my_range(start=0,stop=1,step=1):
- n=start
- while n<stop:
- yield n
- n+=step
- for i in my_range(2,10,2):
- print(i)
自制迭代器
三、面向过程编程
- '''
- 不同的编程范式像不同的武林门派。
- 面向过程的编程思想:
- 核心就是‘过程’二字,即解决问题的过程
- 面向过程编程就好比设计一条流水线,是种机械式的思维方式。
- 优点:复杂问题流程化、简单化
- 缺点:扩展性差,连锁反应
- 应用:用于扩展性要求低的场景
- '''
python之迭代器、生成器与面向过程编程的更多相关文章
- python第四周迭代器生成器序列化面向过程递归
第一节装饰器复习和知识储备------------ 第一节装饰器复习和知识储备------------ def wrapper(*args,**kwargs): index(*args,**kwa ...
- python全栈开发-Day11 迭代器、生成器、面向过程编程
一. 迭代器 一 .迭代的概念 迭代器即迭代的工具,那什么是迭代呢? 迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而 ...
- Python之路【第六篇】:Python迭代器、生成器、面向过程编程
阅读目录 一.迭代器 1.迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 代码如下: while True: ...
- python之迭代器、生成器、面向过程编程
一 迭代器 一 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不 ...
- python之旅:迭代器、生成器、面向过程编程
1.什么是迭代器? 1.什么是迭代器 迭代的工具 什么是迭代? 迭代是一个重复的过程,每一次重复都是基于上一次结果而进行的 # 单纯的重复并不是迭代 while True: print('=====& ...
- python基础知识14---迭代器、生成器、面向过程编程
阅读目录 一 迭代器 二 生成器 三 面向过程编程 一 迭代器 1 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初 ...
- Python 迭代器-生成器-面向过程编程
上节课复习:1. 函数的递归调用 在调用一个函数的过程中又直接或者间接地调用了函数本身称之为函数的递归 函数的递归调用有两个明确的阶段: 1. 回溯 一层一层地调用本身 注意: 1.每一次调用问题的规 ...
- 匿名函数 python内置方法(max/min/filter/map/sorted/reduce)面向过程编程
目录 函数进阶三 1. 匿名函数 1. 什么是匿名函数 2. 匿名函数的语法 3. 能和匿名函数联用的一些方法 2. python解释器内置方法 3. 异常处理 面向过程编程 函数进阶三 1. 匿名函 ...
- python函数:匿名函数、函数递归与二分法、面向过程编程
今天主要讲三大部分内容: 一.匿名函数二.函数递归与二分法三.面向过程编程 一.匿名函数: """ 1. 什么时匿名函数 def定义的是有名函数:特点是可以通过名字重复调 ...
随机推荐
- Git要点
前面的话 本文将总结Git要点 版本管理工具 [作用] 1.备份文件 2.记录历史 3.回到过去 4.对比差异 [分类] 1.手动版本控制(又叫人肉VCS) 2.LVCS 本地 3.CVCS 集中式( ...
- 一个简易的C语言文法
<程序>→<外部声明>|<程序><外部声明> <外部声明>→<函数定义>|<声明> <函数定义>→< ...
- c++ string去除首尾 空格、\n、\r、\t
string s = " test "; size_t n = s.find_last_not_of(" \r\n\t"); if (n != string:: ...
- MongoDB数据模型设计
MongoDB的数据模式是一种灵活模式,其集合并不限制文档结构.这种灵活性让对象和数据库文档之间的映射变得很容易,即使数据记录之间有很大的变化,每个文档也可以很好的映射到各条不同的记录.但在实际使用中 ...
- $.ajax ,ajax请求添加请求头,添加Authorization字段
beforeSend : function(request) { request.setRequestHeader("Authorization", sessionStorage. ...
- Codeforces Round #472 Div. 1
A:某个格子被染黑说明该行和该列同时被选中,使用并查集合并,最后看每个集合中是否有未被染黑的格子即可. #include<iostream> #include<cstdio> ...
- HDU5769-Substring-多校#4-1006-后缀数组
给定一个字符x和一个字符串.要求输出包含此字符的所有不同字串. 后缀数组可以计算一个字符串的所有不同字串,理解了原理就能做这题了. 对于每一个后缀i,将产生len-sa[i]-hight[i]的前缀, ...
- CH2601 电路维修(算竞进阶习题)
01边bfs 这题很容易想到的就是根据符号的情况建图,把每个点方格的对角线看成图的节点,有线相连就是边权就是0,没有就是1 然后跑最短路,但是最短路用的优先队列维护是有logn的代价的 这题还有一个更 ...
- MT【269】含参函数绝对值最大
设函数$f(x)=ax^2+(2b+1)x-a-2$($a,b\in\mathcal R$,$a\neq 0$). (1) 若$a=-2$,求函数$y=|f(x)|$在$[0,1]$上的最大值$M(b ...
- AES解密后多了\0
AES加密解密之后发现多了几个空格,不知道原因.在调试时发现多了\0这种东西 不知道为什么会多这些.后来.replace("\0","")这样做了事