目录


一、迭代器

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之迭代器、生成器与面向过程编程的更多相关文章

  1. python第四周迭代器生成器序列化面向过程递归

      第一节装饰器复习和知识储备------------ 第一节装饰器复习和知识储备------------ def wrapper(*args,**kwargs): index(*args,**kwa ...

  2. python全栈开发-Day11 迭代器、生成器、面向过程编程

    一. 迭代器 一 .迭代的概念 迭代器即迭代的工具,那什么是迭代呢? 迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而 ...

  3. Python之路【第六篇】:Python迭代器、生成器、面向过程编程

    阅读目录 一.迭代器 1.迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 代码如下: while True: ...

  4. python之迭代器、生成器、面向过程编程

    一 迭代器 一 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不 ...

  5. python之旅:迭代器、生成器、面向过程编程

    1.什么是迭代器? 1.什么是迭代器 迭代的工具 什么是迭代? 迭代是一个重复的过程,每一次重复都是基于上一次结果而进行的 # 单纯的重复并不是迭代 while True: print('=====& ...

  6. python基础知识14---迭代器、生成器、面向过程编程

    阅读目录 一 迭代器 二 生成器 三 面向过程编程 一 迭代器 1 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初 ...

  7. Python 迭代器-生成器-面向过程编程

    上节课复习:1. 函数的递归调用 在调用一个函数的过程中又直接或者间接地调用了函数本身称之为函数的递归 函数的递归调用有两个明确的阶段: 1. 回溯 一层一层地调用本身 注意: 1.每一次调用问题的规 ...

  8. 匿名函数 python内置方法(max/min/filter/map/sorted/reduce)面向过程编程

    目录 函数进阶三 1. 匿名函数 1. 什么是匿名函数 2. 匿名函数的语法 3. 能和匿名函数联用的一些方法 2. python解释器内置方法 3. 异常处理 面向过程编程 函数进阶三 1. 匿名函 ...

  9. python函数:匿名函数、函数递归与二分法、面向过程编程

    今天主要讲三大部分内容: 一.匿名函数二.函数递归与二分法三.面向过程编程 一.匿名函数: """ 1. 什么时匿名函数 def定义的是有名函数:特点是可以通过名字重复调 ...

随机推荐

  1. 学习 Spring (五) Aware 接口

    Spring入门篇 学习笔记 Spring 中提供了一些以 Aware 结尾的接口,实现了 Aware 接口的 bean 在被初始化之后可以获取相应资源 通过 Aware 接口,可以对 Spring ...

  2. 1.ansible基本参数介绍

    想使用ansible 先--help学习下基本的options吧小兄弟1: -m 指定模块名称只有一个模块command 可以省略:-M 指出模块路径来加载2: -a 指定模块参数就是模块的内容你知道 ...

  3. class前置声明

    https://www.cnblogs.com/King-Gentleman/p/5081159.html 当两个头文件互相包含的时候,类定义会编译出错,这时需要分别添加上对应的类声明 #includ ...

  4. Rest模式get,put,post,delete含义与区别

    POST   /uri     创建   DELETE /uri/xxx 删除    PUT    /uri/xxx 更新或创建   GET    /uri/xxx 查看   GET操作是安全的.所谓 ...

  5. C 语言-----字符串和输入输出函数

    在C语言中,没有字符串类型,那它是怎么表示字符串呢? 由于字符串是一系列单个字符的组合,所以它用char 类型的数组来表示字符串,在数组中,一个数组元素存放一个char类型字符. ]; name 变量 ...

  6. Fence Repair POJ - 3253 哈夫曼思想 优先队列

    题意:给出一段无限长的棍子,切一刀需要的代价是棍子的总长,例如21切一刀 变成什么长度 都是代价21 列如7切成5 和2 也是代价7题解:可以利用霍夫曼编码的思想 短的棍子就放在底层 长的尽量切少一次 ...

  7. 洛谷P1083借教室题解

    题目 这个难度感觉并没有那么高,因为这个题暴力也好打,但是比较难想出正解,因为如果你不看标签是很难想到这个题竟然是二分,当然前缀和应该很好想,毕竟让你求的是在某段时间内借教室的和是否满足. 这样我们可 ...

  8. 【XSY2719】prime 莫比乌斯反演

    题目描述 设\(f(i)\)为\(i\)的不同的质因子个数,求\(\sum_{i=1}^n2^{f(i)}\) \(n\leq{10}^{12}\) 题解 考虑\(2^{f(i)}\)的意义:有\(f ...

  9. Nginx 添加 PHP 支持

    背景介绍默认安装的Nginx是无法打开php文件的,需要修改相关配置才能支持php 安装yum -y install epel-release yum -y install nginx yum ins ...

  10. [WC2008]游览计划 解题报告

    [WC2008]游览计划 斯坦纳树板子题,其实就是状压dp 令\(dp_{i,s}\)表示任意点\(i\)联通关键点集合\(s\)的最小代价 然后有转移 \[ dp_{i,S}=\min_{T\in ...