博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数------迭代器、生成器、面向过程的编程思想
阅读量:4978 次
发布时间:2019-06-12

本文共 1687 字,大约阅读时间需要 5 分钟。

迭代器

1.什么是迭代:迭代器是一个重复的过程,并且每次重复都是基于上一次的结果而来

l={'x':1,'y':2}

n=o

while n<len(l):

       print(l[n])

       n+=1

 

2.迭代器:迭代取值工具

可迭代的对象:在python中,但凡内置有__iter__方法的对象都是可迭代的对象

str='hello'#字符串 list=[1,2,3]#列表 tuple=(1,2,3)#元组 dic={'x':1}#字典 s1={'a','b','c'}#集合 f=open('a.txt','w',encoding='utf-8')#文件

总结:

可迭代的对象:str,list,tupl,dict,set,file

1.获取可迭代对象的方式:无须获取,python内置str,list,tupl,dict,set,file  。都是可迭代的对象

2.特点:内置有__iter__方法都叫可迭代的对象,执行该方法会拿到一个迭代器对象

 

迭代器对象:文件对象本身就是迭代器对象

特点:内置有__next__方法,执行该方法就会拿到迭代器对象中的一个值

           内置有__iter__方法,执行该方法会拿到迭代器本身

 

迭代器的优点:

1.提供了一种可不依赖于索引的取值方式

2.迭代器更加节省内存

 

迭代器缺点:

1.取值麻烦,只能一个一个取,只能往后取,

2.并且是一次性的,无法用len获取长度

 

for循环原理分析

1.for循环称之为迭代器循环,in后跟的必须是可迭代的对象

2.for循环会执行in后对象的__iner__方法,拿到迭代器对象

3.然后调用迭代器对象的__next__方法,拿到一个返回值赋值给line,执行一次循环体

4.周而复始,直到取值完毕,for循环会检测到异常自动结束循环

l=open('a.txt','r',encoding='utf-8')

for line in l:

      print(line)

 

 

1、生成器

函数内包含有yield关键字,

再调用函数,就不会执行函数体代码,拿到的返回值就是一个生成器对象

def chicken():

      print('=====>first')

      yield 1

      print('=====>sencond')

      yield 2

      print('=====>third')

      yield 3

obj=chicken()

生成器本质就是迭代器,也就是说生成器的用法其实就是迭代器的用法。

res=obj.__next__()

print(rse)

 

1.iter_obj=obj.__iter__(),  #拿到迭代器

2.出发iter_obj.__next__(),   #拿到该方法的返回值,赋值给item

3.周而复始,直到函数内不在有yield,即取值完毕

4.for会检测到StopIteration异常,结束循环

for item in obj:

     print(item)

 

总结yield:

1.为我们提供了一种自定义迭代器的方式,可以在函数内用yield关键字,调用函数拿到的结果就是一个生成器,生成器就是迭代器。

2.yield可以像return一样用于返回值,区别是return只能返回一次值,而yield可以返回多次,因为yield可以保存函数执行的状态

def my_range():

       print('start.......')

       n=0

       while True

               yield n

                n+=1

 

for i in my_range():

print(i)

 

注意:

必须初始化一次,让函数停在yield的位置

 

 

面向过程的编程思想

核心是’过程’二字,过程即解决问题的步骤,即先干什么,再干什么。

基于面向过程写程序就好比在设计一条流水线,是一种机械式的思维方式。

优点:复杂的问题流程化进而简单化

缺点:修改一个阶段,其他阶段都有可能需要做出修改,牵一发而动全身,即扩展性极差

应用:由于扩展性要求低的场景

 

转载于:https://www.cnblogs.com/gaobei/articles/8681753.html

你可能感兴趣的文章
CSS内嵌样式实现打字效果
查看>>
从 HTTP 到 HTTPS 再到 HSTS
查看>>
CentOS7和CentOS6的区别
查看>>
关系型数据库事务二:隔离级别
查看>>
送给IT新人--多看、多问、多写
查看>>
MySQL常用命令
查看>>
今天端午节
查看>>
UOJ #79. 一般图最大匹配
查看>>
应用程序域的用法
查看>>
InfluxDB执行语句管理(query management)
查看>>
大都市的同事爱。。。
查看>>
Yeoman官方教程:用Yeoman和AngularJS做Web应用
查看>>
ant 小结
查看>>
spring boot 简单配置 mybatis
查看>>
FPC and Qt
查看>>
08 MySQL存储引擎
查看>>
js 正则表达式精确匹配(01)
查看>>
IOS应用安全(五):高级Runtime分析和操作
查看>>
java算法的类型
查看>>
C语到C++注释转换小项目
查看>>