迭代器
可迭代对象: 含有__iter__方法叫做可迭代对象 --> 除了数字类型都是可迭代对象 --> 可迭代对象使用__iter__变成迭代器# 迭代器对象: 含有__iter__和__next__方法叫做迭代器对象 --> 只有文件时迭代器对象 --> 迭代器使用__iter__依然是迭代器# 可迭代对象不一定是迭代器对象; 迭代器对象一定是可迭代对象
for循环就是应用了迭代器原理 , 可迭代对象不一定低迭代器 , 但是迭代器一定是可迭代对象
可迭代对象
对于这一切的对象中,但凡有__iter__
方法的对象,都是可迭代对象
基本的数据类型 , 除数字类型和布尔类型外 , 都是可迭代对象
__iter__
方法可以使可迭代对象变成迭代器
迭代器
执行可迭代对象的__iter__
方法,拿到的返回值就是迭代器对象。
特点:
- 内置
__next__
方法,执行该方法会拿到迭代器对象中的一个值 - 内置有
__iter__
方法,执行该方法会拿到迭代器本身 - 文件本身就是迭代器对象。
缺点:
- 取值麻烦,只能一个一个取,并且只能往后取,值取了就没了
- 无法使用len()方法获取长度
三元表达式
条件成立时的返回值 if 条件 else 条件不成立时的返回值
x = 10
y = 20
if x > y:
print(x)
else:
print(y)
列表推导式
for i in range(10):
lt.append(i)
lt = [i**2 for i in range(10)]
lt = [i**2(可以做运算) for i in [1,2,3,]]
lt = [i**2 for i in [1,2,3]]
print(lt)
字典生成式
print({i: i**2 for i in range(10)})
zip()方法
通过解压缩函数生成一个字典
生成器
generator 本质是一个迭代器 ---> 生成器: 本质就是迭代器,生成器含有yield关键字的函数叫做生成器
def func():
print(1)
yield
print(2)
yield
g = func()
print(g
递归
函数a内部直接调用函数a本身
每一次递归,会不会结束函数?不会,并且每一次递归都会开辟内存空间,如果一直开辟内存就炸掉了,所以最多递归1000次
真正的递归必须得要有 退出条件
count = 0
def a():
global count
count += 1
print(count)
if count == 5:
return
a()
a()