9.生成器

目录

一、例外处理

1.代码错误

a.语法错误:SyntaxError

b.除以0错误:ZeroDivisionError

c.列表下标越界:IndexError

d.类型错误:TypeError

e.访问变量不存在:NameError

f.字典关键字不存在:KeyError

g.未知的变量属性:AttributeError

2.捕捉错误

a.try-expect语句

b.try-finally语句

c.else语句

二、推导式

1.概念

2.基本语法

3.生成器推导式

三、生成器

1.概念

2.生成器函数

3.yield与return

4.协同程序

四、上机练习

第一个:输出商

第二个:勾股数

第三个:斐波那契数列


一、例外处理

1.代码错误

程序的逻辑错误、用户输入不合法等都会引发异常,从而导致程序的崩溃

可以利用python提供的异常处理机制,在异常出现时及时捕获并处理

a.语法错误:SyntaxError

b.除以0错误:ZeroDivisionError

c.列表下标越界:IndexError

d.类型错误:TypeError

e.访问变量不存在:NameError

f.字典关键字不存在:KeyError

g.未知的变量属性:AttributeError

2.捕捉错误

a.try-expect语句

try:

        <检测语句>

expect <错误类型>[as e]:

        <处理异常>

try:#为缩进的代码段设置陷阱

except:#处理错误的代码

针对不同的异常可以设置多个expect

b.try-finally语句

try:

        <检测语句>

expect <错误类型> [as e]:

        <处理异常>

finally:

        <语句块>

finally:#无论是否出错,都执行的代码

c.else语句

try:

        <检测语句>

expect <错误类型> [as e]:

        <处理异常>

else:

        <语句块>

else:#未出错时执行的代码

二、推导式

1.概念

推导式是从一个或多个迭代器快速简洁的创建数据结构的一种方法

将循环和条件判断结合,从而避免语法冗长的代码

可以用来生成列表、字典和集合

2.基本语法

列表推导式:

[<表达式> for <变量> in <可迭代对象> if <逻辑条件>]

字典推导式:

{<键值表达式>:<元素表达式> for <变量> in <可迭代对象> if <逻辑条件>}

集合推导式:

{<元素表达式> for <变量> in <可迭代对象> if <逻辑条件>}

3.生成器推导式

(<元素表达式> for <变量> in <可迭代对象> if <逻辑条件>)

返回一个生成器,对象也是可迭代对象

但生成器并不立即产生全部元素,仅在要用到元素的时候才生成,可以极大节省内存

三、生成器

1.概念

 生成器是用来创建数据序列的一种对象

使用它可以迭代庞大的序列,且不需要在内存中创建和存储整个序列

通常生成器是为迭代器产生数据的,是迭代器的一种实现

2.生成器函数

如果要创建一个比较大的序列生成器,推导式会比较复杂,一行表达式无法容纳,这时可以定义生成器函数

生成器函数的定义与普通函数相同,只是将return换成了yield

3.yield与return

yield:

立即返回一个值

下一次迭代生成器函数时,从yield语句后的语句继续执行,直到再次yield返回或终止

return:

终止函数的执行,下次调用会重新执行函数

4.协同程序

可以运行的独立函数,调用函数可以暂停或挂机,并在需要的时候从离开的地方继续或重新开始

四、上机练习

第一个:输出商

a=input()
b=input()
try:
    a/b
    isinstance(a,int)
    isinstance(b,int)
except ZeroDivisionError as e :
    print("ZeroDivisionError:",e)
except TypeError as e:
    print("TypeError:",e)
else:
    print(a/b)

第二个:勾股数

[print(i,j,k) for k in range(101) for i in range(1,k+1) for j in range(i,k) if i*i + j*j==k*k]

第三个:斐波那契数列

def fib():
    a=0
    b=1
    for i in range(100):
        c=a+b
        yield b
        a,b=b,c
for d in fib():
    print(d)
    if d>1000:
        break

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值