day13
迭代器
不是函数,只是一个称呼而已
# 迭代器:x = 10 # 不是可迭代对象
s = 'abc'
s.__iter__()
lt = [1, 2, 3]
lt.__iter__()
tup = (1,)
tup.__iter__()
dic = {'a': 1}
dic.__iter__()
se = {1}
se.__iter__()
fw = open('test.txt', 'a+', encoding='utf8')
fw.seek(0, 0)
fw.__iter__()
可迭代对象:
含有__iter__方法叫做可迭代对象
除了数字类型都是可迭代对象
可迭代对象使用__iter__变成迭代器
迭代器对象:
含有__iter__和__next__方法叫做迭代器对象
只有文件时迭代器对象
迭代器使用__iter__依然是迭代器#
可迭代对象不一定是迭代器对象; 迭代器对象一定是可迭代对象
三元表达式
x = 10
y = 20
三元表达式 --> 三目表达式
print(x) if x > y else print(y)
列表推导式
lt = [i**2 for i in range(10)
print(lt)
字典生成式
lt1 = ['a', 'b', 'c']
lt2 = [1, 2, 3]
dic = {k: v ** 2 for k, v in zip(lt1, lt2)}
print(dic)
lt = list('abc')
print(lt)
生成器生成式
自定义range
def my_range(start, stop, step=1):
while start < stop:
yield start
start += 1
g = my_range(0, 3)
print(f"list(g): {list(g)}")
list(g): [0, 1, 2]
yield的特性
暂停函数
通过next取值
return的特性
- 终止函数 2. 通过调用函数拿到值写一个
range方法
- 生成器 2. 可变长参数