Python 迭代器-生成器-面向过程编程 未完续

2018-08-03 07:36:30来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

上节课复习:
1. 函数的递归调用
在调用一个函数的过程中又直接或者间接地调用了函数本身称之为函数的递归
函数的递归调用有两个明确的阶段:
1. 回溯
一层一层地调用本身
注意:
1.每一次调用问题的规模都必须有所减少
2.必须有一个明确的结束条件或者进入递归的条件
2. 递推
往回一层一层的推算出结果

2. 二分法

3.三元表达式
res=条件成立情况下的返回值 if条件 else条件不成立情况下的返回值

4.列表生成式
[for i in range(10) if i > 3]

5.字典生成式
(i:i for in in range(10) if i>3)

6.匿名函数
匿名函数的精髓在于没有名字,没有名字意味着只能调用一次就会被当做垃圾回收

lambda 参数1,参数2....:函数体代码

max([],key=lambda 参数1,参数2....:函数体代码)



理论性的知识:
1. 迭代器
1.什么是迭代器
迭代器指的是迭代取值的工具
迭代是一个重复的过程,每一次重复都是基于上一次的结果而来
#单纯的重复不是迭代
i=0
while True:
print(i)

#迭代:重复+每次重复都是基于上一次的结果而进行
l=['a','b','c']
i = 0
while i < len(l):
print(l[i])
i+=1

2.为何要用迭代器
迭代器提供了一种通用的且不依赖于索引的迭代取值方式

3.如何用迭代器
1.可迭代的对象iterable: 但凡内置有__iter__方法的对象都称之为可迭代的对象
可迭代的对象: str, list, tuple, dict, set, 文件对象
执行可迭代对象下的__iter__方法,返回的值就是一个迭代器对象iterator
dic={'x':1,'y':2,'z':3}
iter_dic=dic.__iter__()
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__())

2.迭代器对象
1.内置有__next__方法的对象,执行迭代器__next__方法可以不依赖索引取值
2.又内置有__iter__方法的对象,执行迭代器__iter__方法得到的仍然是迭代器本身
ps:
1.迭代器对象一定是可迭代的对象,而可迭代的对象却不一定是迭代器对象
2.文件对象本身就是一个迭代器对象

for本质应该称之为迭代器循环
工作原理
1.先调用in后面那个对象的__iter__方法,将其变成一个迭代器对象
2.调用next(迭代器),将得到的返回值赋值给变量名k
3.循环往复直到next(迭代器)抛出异常,for会自动捕捉异常然后结束循环
ps:从for角度,可以分辨出但凡可以被for循环循环取值的对象都是可迭代的对象
dic={'x':1,'y':2,'z':3}
for k in dic:
print(k)

3.迭代器总结
优点:
1.提供一种不依赖于索引的迭代取值方式
2.同一时刻在内存中只存在一个值,更节省内存
缺点:
1.取值不如按照索引的方式灵活,(不能取指定的某一个值,而且只能往后取)
2.无法预测迭代器的长度


2. 生成器(自定义的一种迭代器)



3. 面向过程编程

代码操作:
1. 生成器表达式
2. 内置函数

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:利用Python爆破会员网站!程序员的字典里没有充钱二字!

下一篇:nginx+uwsgi阿里云ubuntu服务器上简单部署flask RESTful风格项目