day11 迭代器、生成器、三元表达式、生成式、面向过程编程

day11 迭代器、生成器、三元表达式、生成式、面向过程编程

一、迭代器

1.什么是迭代器

迭代器指的是跌代取值的工具
跌代是一个重复的过程,但不是单纯的重复,每次重复都是基于上一次的结果而进行的

#这个累加的过程就是跌代
count = 1
while count < 5:
    count += 1
#跌代去列表的值
l = [11, 22, 33, 44, 55, 66]


def get_item():
    count = 0
    while count < len(l):
        print(l[count])
        count += 1


get_item()

2、为何用迭代器

1.为了找到一种通用的跌代取值方案
2.为了节省内存

3、如何用迭代器

内置有_iter_方法的类型都称之为可迭代的对象
但凡调用了_iter_方法,就会将该类装换成迭代器对象
res=值.iter()
迭代器对象的特点:
1.内置有_next_方法
2.内置有_iter_方法------>for循环
跌代器的优缺点总结:
优点:
1.提供了一种不依赖于索引的一种通用迭代取值方案
2.惰性计算,节省内存
缺点:
1.取值麻烦
2.无法预测值的长度
3.一次性的

4、实例

#去列表的值
l = [11, 22, 33]
iter_l = l.__iter__()
print(iter_l.__next__())
print(iter_l.__next__())
print(iter_l.__next__())

l = [11, 22, 33]
iter_l = l.__iter__()
while True:
    try: #监测出现stopIteration
        print(next(iter_l))
    except StopIteration:
        break

5、for循环原理

1.调用可迭代对象.iter(),拿到一个迭代器对象
2.调用next(迭代对象),将返回值赋值变量item
3.循环往复,直到抛出异常StopIteration,for循环会检测异常然后结束循环

f=  open('a.txt',mode='rt',encoding='utf-8')
for line in f:
    print(line)
print('---------------')
for line in f: #不会在打印line,因为值已被取完
    print(line)
f.close()

二、生成器

1.生成器

生成器是一种自定义的迭代器

2.为何用生成器

为了节省内存

3.如何用生成器

函数体内但凡出现yield关键字,调用函数将不会触发函数体代码的运行,而是会返回一个生成器对象,生成器本质就是一个迭代器

yield和return:
相同点:在返回值角度用法一样
不同点:yield可以返回多个值,而return只能返一次

yield可以暂停函数,然后我们可以用next方法触发函数体代码的运行------>携程

4、实例

def func():
    print("1111")
    yield 1
    print("2222")
    yield 2
    print("3333")
    yield 3


g = func()
print(g)
res = next(g)
print(res)
res = next(g)
print(res)
res = next(g)
print(res)
def my_rang(start, stop, step):
    while start < stop:
        yield start
        start += step


for i in my_rang(0, 50000, 3):
    print(i)

三、三元表达式

实例

def max2(x,y):
    if x> y:
        return x
    else:
        return y
#上述函数可以简化为下面三元表达式
x=1
y=2
res=x if x> y else y
print(res)

四、生成式

1.列表生成式

l=[]
for i in range(10):
    l.append(i)
print(l)
#上述函数可以直接写成下列格式
l=[i**2 for i in range(10)]

2、字典生成式

#例一
res={i:i for i in range(5)}
print(res)
#例二
l=[("name","jack"),("age","19")]
res={k:v for k,v in l}
print(res)

3、集合生成式

res={i for i in range(5) if i >1}
print(res)

4、生成器表达式

res=(i for i in range(5))  #小括号是生成器表达式的符号,不是元组的
print(next(res))
print(next(res))
print(next(res))
print(next(res))
print(next(res))
#读文件a.txt中字符个数
with open("a.txt",mode='rt',encoding="utf-8") as f:
    # res=0
    # for line in f:
    #     res += len(line)
    # print(res)
    l=[len(line) for line in f]
    res=sum(l)
    print(res)

五、面向过程编程

面向过程编程思想
核心是过程二字,过程就是做事的步骤,即先干啥,后干啥,再干啥
所以基于该思想编写的程序就好比在设计一条条的流水线
优点:复杂的问题流程化,进而简单化
缺点:扩展性差

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值