python基础(六) P130-P141

学习视频地址:https://www.bilibili.com/video/BV15J411T7WQ?p=130

P130 异常

异常处理:
格式:
try :
可能出现异常的代码
except :
如果有异常执行的代码
finally :
无论是否存在异常都会被执行的代码
情况1:
在这里插入图片描述
情况2:获取Exception的错误原因

try :
	有可能会产生多种异常
except  异常类型1print(。。。)
except  异常类型2pass
except  Exception  as  err :
	print (err)  ---->  err的内容就是错误原因:

情况3:

try :
	有可能有异常的代码
except  类型1pass
	. .
else :
	如果try中没有发生异常则进入的代码

注意 : 如果使用else则在try代码中不能出现return
在这里插入图片描述
情况4:

try :
	有可能有异常的代码
except  类型1pass
	. .
finally :    
	有没有错误都要进行finally

P133 异常抛出

异常抛出: raise 自定义报错内容
格式:
raise 异常类型(‘提示信息’)
在这里插入图片描述

P135 列表推导式 字典推导式 集合推导式

列表推导式:
格式:
[表达式 for 变量 in 旧列表 ] 或者 [表达式 for 变量 in 旧列表 if 条件 ]
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
列表表达式总结:(3种)
在这里插入图片描述
集合推导式:
在这里插入图片描述
字典推导式:
在这里插入图片描述
进程>线程>协程

P137 生成器 应用:协程

生成器定义:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例:

g = (x * 3 for x in range(10))
print(type(g))
print(g)

# 方式1:通过调用__next__() 方式得到元素
print(g.__next__())  # 0
print(g.__next__())  # 3
print(g.__next__())  # 6
print(g.__next__())  # 9
# 方式2:(生成器对象)
# 每调用一次next则会产生一个元素

print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))  # 生成器本来就可以产生10个得到了10个,
# 第11个抛出异常StopIteration

异常更正后:

g = (x * 3 for x in range(10))
try:
    while True :
        print(next(g))
except:
    print('超出范围!')

定义生成器第二种方式:
在这里插入图片描述
在这里插入图片描述
斐波那契例子:

# 斐波那契函数 0,1,1,2,3,5,8
def fib(length):
    a, b = 0, 1
    n = 0
    while n < length:
        yield b  # return b + 暂停
        a, b = b, a + b
        n += 1
    return '没有更多元素了'


g = fib(8)
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
结果:
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/Demo/代码/16day/71703.py", line 21, in <module>
print(next(g))
StopIteration: 没有更多元素了

send使用:

def gen():
    i = 0
    while i < 5:
        temp = yield i  # return 1 + 暂停
        print('tenmp', temp)
        i += 1
    return '没有更多数据'


g = gen()
print(g.send(None))
n1 = g.send('呵呵')
print('n1', n1)
n2 = g.send('哈哈')
print('n2', n2)

应用:<协程>例子:

def task1(n):
    for i in range(n):
        print('正在搬第{}块砖!'.format(i))
        yield None


def task2(n):
    for i in range(n):
        print('正在听第{}首歌!'.format(i))
        yield None


g1 = task1(3)
g2 = task2(3)
while True:
    try:
        # print(next(g1))
        # print(next(g2))
        g1.__next__()
        g2.__next__()
    except:
        break
结果:
正在搬第0块砖!
正在听第0首歌!
正在搬第1块砖!
正在听第1首歌!
正在搬第2块砖!
正在听第2首歌!

生成器总结:
定义生成器方式:
1.通过列表推导式方式
g = (x+1 for x in range(6))
2. 函数+yield

	def func () :
 		...
		yield
	g = func()

产生元素:
1.next(generator) ----> 每次调用都会产生一个新的元素,如果元素产生完毕,再次调用的话都会
产生异常
2.生成器自己的方法:
g.next() : 获取下一个元素
g.send(value) : 向每次生成器调用中传值 注意:第一次调用send(None)

P141 迭代生成器

在这里插入图片描述
在这里插入图片描述
迭代器与生成器的关系:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值