day 13
01.迭代器
-
可迭代对象
迭代器只是一种称呼
# 可迭代对象;含有.__iter__方法的数据类型就叫做可迭代对象 # 字符串、列表、元组、字典、集合、文件。都是可迭代对象(现阶段) # .__iter__()方法将可迭代对象转换成迭代器对象
-
迭代器对象
同可迭代对象一样,这也是对拥有该种特性的数据类型的称呼
迭代器对象和函数对象一样不能直接打印,需要通过方法使用
# 迭代器对象;同时含有.__iter__和.__next__方法的对象叫做迭代器对象 # 文件是原生的迭代器对象,其他的对象都要经过.__iter__方法进行转换 # 迭代器对象使用.__iter__()方法后没有变化 # .__next__()是对迭代器对象的使用方法
迭代器对象;提供了一种不依靠索引取值的手段
# 通过.__iter__()命令将可迭代对象内的元素按照顺序放入一个新开启的内存空间中 # 通过.__next__()命令将此空间内的元素按照顺序一一取出且每个元素都只能取出一次
02.三元表达式
x=10
y=20
if x>y:
print(x)
else:
print(y)
# 三元表达式
print(x if x>y else y)
# 条件在中间,成立打印if前面的,否则打印else后面的
03.列表推导式
# 通过for循环将0到9写入到一个空列表当中
lt=[i*3 for i in range(10)] # 可以对i进行修饰
st='123456'
lt=[int(i)**2 for i in st]
此推导式和下面的for循环效果相同
lt=[]
for i in st:
j=int(i)
lt.append(j**2)
04.字典生成式
zip 的使用
st1='123456'
st2='abcdefasdf'
y=zip(st1,st2) # y相当于一个特殊的迭代器对象一样,他会将两个变量内的元素按照位置顺序生成一个个元组,当其中一方元素用尽时停止。
st1='123456'
st2='abcdefasdf'
dic={k:v for k,v in y}
# dic={'1': 'a', '2': 'b', '3': 'c', '4': 'd', '5': 'e', '6': 'f'}
05.生成器生成式
generator 生成器本质是一个迭代器 --》自定义的一个迭代器
lt=[i for i in range(10000000)]
print(lt) # 此时就会占用大量的内存
g=(i for i in range(10000000))
print(g)
for i in g:
print(i) # 这样在使用时就会一步步运行,想用多少取多少,节省空间
06.生成器
含有yield关键字的函数叫做生成器
# 自定义一个简单的range方法
def range(*args):
if len(args)==2:
x,y=args
while x<y:
yield x
x+=1
elif len(args)==3:
x,y,z=args
while x < y:
yield x
x += z
else:
count=0
while count<args[0]:
yield count
count+=1
for i in range(2,20,3):
print (i)
# 效果与内置方法中的range使用相同
for i in range(2,20,3):
print (i) # 结果相同
-
yield于return的区别
-
yield
暂停函数,多个yield都可以运行
通过next取值
-
return
终止函数
动过调用函数拿到返回值
-
07.递归
递归就是在函数内部调用该函数
def age(x):
if x==0:
return 18
x-=1
return age(x)+2
res=age(10)
print(res)