函数进阶 2------总结
迭代器
迭代器可以说成是重复,并且每一次的重复都是基于上一次的结果来的。
可迭代对象
python中一切皆对象,对这一切思想中,但凡有_iter_方法的对象,都是可迭代对象。
但是需要注意的是,数字类型的不是可迭代对象。
含有_____________iter_______________和___________next______方法的对象就是迭代器对象
有迭代器对象的目的:提供了不依赖索引取值的手段
it = [1,2,3,4]
it.__iter__()
tup = (1,2,3,4)
it.__iter__()
dic = {'a':1}
dic.__iter__()
se = {1}
se.__iter__()
fw = open('test.txt','at',encoding='utf8')
fw.seek(0,0)
fw.__iter__()
迭代取值的方法是基于上一个值来进行一行行取值。
it_iter = iter.__iter__()
print(it_iter.__next+__())
s = [1,2,3,4,5]
s = s.__iter__()
第一种打印方法:
# print(s.__next__())
# print(s.__next__())
# print(s.__next__())
# print(s.__next__())
# print(s.__next__())
注:在列表内的值不够的时候,会提示StopIteration的报错
第二种方法:解释for循环的原理
while True:
try:
print(s.__next__())
except StopIteration:
break
在执行到报错的时候会自动运行break
注:迭代器的主要作用就是来取值,他只能一行一行向后取取值,过于麻烦,而且在值取完之后就没有了,而且无法使用len()方法获取长度。
三元表达式
又称三目表达式,当条件成立走这里if条件,条件不成立走else调价
print(x) if x > y else print(y)
字典生成式
创建字典的两种方法:
例1:for循环生成
dic = {}
for i in range(10):
dic[i] = i
print(dic)
例2:zip生成
lt1 = ['a', 'b', 'c']
lt2 = [1, 2, 3]
dic = {k: v ** 2 for k, v in zip(lt1, lt2)}
print(dic)
生成器
定义:含有yield关键字的函数叫做生成器。一个yelid相当于 一个next,暂停函数。
关于yeild与return特性的去区别
yeild的特性:
1.暂停函数
2.通过next取值,一个yeild相当于一个next。
return的特性:
1.终止函数
2.通过调用函数拿到值
递归
-
什么是递归
函数内部直接调用函数本身
# 递归: # 1. 函数内部调用函数自己 # 2. 必须要有退出条件 # 3. 递归必须要有规律
-
import sys sys.setrecursionlimit(10) #设置最大递归次数 print(sys.getrecursionlimit())
-
def a(): x = 1 print(x) a() a() #每一次递归不会结束函数,并且每一次递归都会开辟内存空间,如果一直开辟内存就炸掉了,所以最多递归1000次左右。
-
# 玉阳 20岁 ; 后面的同学大2岁,后面的后面的同学比后面的同学大2岁; 求第6位同学的年龄 ''' res = 30 res = 28 + 2 res = 26 + 2 + 2 res = 24 + 2 + 2 + 2 res = 22 + 2 + 2 + 2 + 2 res = 20 + 2 + 2 + 2 + 2 + 2 res = 18 + 2 + 2 + 2 + 2 + 2 + 2 ''' def age(x): if x == 0: return 18 x -= 1 return age(x) + 2 res = age(6) print(res) # 32