day17-1 迭代器,三元表达式,字典推导式,列表生成式,

迭代器

可迭代对象

  • 拥有iter方法的对象就是可迭代对象
# 以下都是可迭代的对象

st = '123'.__iter__()
lis = [1, 2, 3].__iter__()
tup = (1, 2, 3).__iter__()
dic = {1: 'one', 2: 'two', 3: 'three'}.__iter__()
se = {1, 2, 3}.__iter__()
with open (r'123.txt', 'w', encoding='utf-8') as fw:
    fw.__iter__()

迭代器对象

  • 拥有next方法的可迭代对象就是迭代器对象
# 依赖索引的数据类型迭代取值
lis = [1, 2, 3]
iter_lis = lis.__iter__() # 把可迭代对象变成迭代器对象
print(iter_lis.__next__())
print(iter_lis.__next__())
print(iter_lis.__next__())
1
2
3
# 不依赖索引的数据类型迭代取值
dic = {1: 'one', 2: 'two', 3: 'three'}
iter_dic = dic.__iter__()
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__())
1
2
3

__next__其实是在遍历可迭代对象的元素,一旦遍历完报错

hobby_list2 = ['run','read']
count = 0
while True:
    print(hobby_list2[count])
    count += 1
    if count == len(hobby_list2):
        break
run
read
  • for循环不依赖索引取值
  • 这一段代码如果用c写,就是for循环的原理
hobby_list = ['run', 'read']
hobby_list_iter = hobby_list.__iter__()
while True:
    try:
        print(hobby_list_iter.__next__())
    except:
        break
        
run
read
for i in hobby_list:  # for循环自动帮我们把变量变成了可迭代对象
    print(i)
run
read
print(hobby_list)       # 一筐鸡蛋
print(hobby_list.__iter__())  # 相比较列表,它节省内存空间,老母鸡

总结

  1. 可迭代对象: 拥有iter方法的对象就是可迭代对象,可迭代对象不一定是迭代器对象,文件就是特例
  2. 迭代器对象: 拥有next方法的可迭代对象就是迭代器对象.迭代器对象一定是可迭代对象
  3. 文件既是可迭代对象,又是迭代器对象

三元表达式(三目表达式)

  • 只有else没有elif
x = 7
if x == 7:
    print(x)
else:
    print(x**2)
7
# 不推荐使用,写代码还是尽量整洁易懂
print(x) if x == 7 else print(x**2)
7

列表推导式

lis = []
for i in range(10):
    lis.append(i)
print(lis)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 不推荐写
print([i for i in range(10)])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 及其不推荐写,不然会被当成傻逼
print([i*2 if i>5 else i for i in range(10)])
[0, 1, 2, 3, 4, 5, 12, 14, 16, 18]

字典生成式

dic = {i:i*2 for i in range(5)}
print(dic)
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}
## 拉链函数
res = zip('abcd', [1,2,3,4])
dic = dict()
for k,v in res:
    dic[k] = v
print(dic)
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
print({k:v for k,v in zip('abcd', [1,2,3])})
{'a': 1, 'b': 2, 'c': 3}

猜你喜欢

转载自www.cnblogs.com/lucky75/p/10969800.html