day13模块、包、异常捕获

模块、包、异常捕获

一、作业修改

1、写一个函数将一个指定的列表中的元素逆序( 如[1, 2, 3] -> [3, 2, 1])(注意:不要使用列表自带的逆序函数)

list1=[1, 2, 3,4]
for i in list1:
    print(f'元素{i}')
    print(f'pop结果{list1.pop(0)}')
    print(f'列表{list1}')
print(list1)

3.编写一个函数,计算一个整数的各位数的平方和

# reduce
def sum_of_square(num: int):
    return reduce(lambda initial, item: initial + int(item) ** 2, str(num), 0)
# 列表推导式
def sum_of_square(num: int):
    return sum([int(i) ** 2 for i in str(num)])

8 已经一个列表message, 使用reduce计算列表中所有数字的和

# 列表推导式:
result=reduce(lambda initial,item: initial+item ,[i for i in message if type(i)in (int,float)],0)
print(result)
# 三名运算符
result=reduce(lambda inital,item:inital+0 if type(item)not in (int,float)  else inital+item,message,0)
print(result)

二、生成器

1、什么是生成器

  • 1)是一种可以创建多个数据的容器,生成器中保存的是创建数据的方法,而不是数据本身

  • 2)特点:

    • 打印生成器的时候看不到元素,
    • 也无法通过len统计元素个数
    • 如果需要生成器中的数据,必须将数据取出,而且是取一个少一个
  • 3)生成器获取元素的方式好=和迭代器获取元素的方式一样

2、创建生成器

  • 调用带有yield关键字的函数就可以得到一个生成器
def func1():
    print('abc')
    yield 
    return 100

3、怎么控制生成器中元素的个数和元素的值

  • 执行创建生成器函数体的时候遇到几个yield,
  • 对应的生成器就创建几个数据,每次遇到yield,
  • 创建的数据就是yield关键字后的值
def func3(n):
    yield 100
    if n%2==0:
        yield 200
    yield 300


gen3=func3(5)
print(list(gen3))  # [100, 300]

三、模块

1、什么是模块

  • python中一个py文件就是一个模块
    • 系统模块
    • 自定义模块

2、怎么在一个模块中使用另外一个模块中的内容

  • **1)使用前提:**在一个模块使用另一个模块中的内容,被使用的内容所在的模块名必须符号变量名要求

  • 2)导入模块

    • a. import 模块名 -
      • 导入指定模块,导入后可以通过 模块名.xxx 的方式使用模块中所有内容
    • b. from 模块名 import 内容1,内容2,…
      • 导入模块,导入后可以直接使用指定模块的内容
    • c. from 模块名 import * -
      • 可以直接使用模块中所有内容
    • d.import 模块名 as 新模块名
    • 导入指定模块后,对指定模块重命名:‘模块名.xxx’
    • e. from 模块名 import 内容1 as 新内容

导入方式1 import 模块名

import  test
print(test.a)
print(test.name)
print(test.func1(21))

导入方法2 from 模块名 import 内容1,内容2,

from test import a,func1
print(func1(22))
print(a)
# print(name)  # NameError: name 'name' is not defined
print(test.name)  # 会报错

导入方法3 from 模块名 import *

from  test import *
print(a)
print(name)
print(func1(21))

导入方法4 import 模块名 as 新模块名

import test as t1
print(t1.func1(2))
print(t1.name)

对导入的内容重命名 from 模块名 import 内容1 as 新内容

from test import name as t_name,a as t_a
name='笑笑'
a=100
print(t_a)
print(t_name)
print(a,name)

四、包

1、什么是包

  • 包含__init__.py文件的文件夹就是包

2、怎么使用包或者文件夹中模块的内容-

  • import 包名

    • 只适用于包,导入指定的包,导入后可以通过包名.xxx取使用包中__init__.py文件中的东西
  • from 包名 import 模块1,模块2…

    • 导入指定包中指定的模块,导入后通过模块名.xx使用指定模块中的内容(适用于文件夹)
  • from 包名 import 内容1,内容2…

    • 导入指定包中__init__.py文件中的内容
  • import 包名.模块名

  • from 包名.模块名 import 内容1,内容2…

1)import 包名 (__init__中的内容)

import  files2
files2.f_test2()

2)from 包名 import 模块1,模块2…

3)from 包名 import 内容1,内容2…( init.py中的内容)

from files2 import test2, test4, pi, f_test2

print(test4.str1)
print(test2.name)

4)import 包名.模块名

import files2.test2 as f2_t2
print(f2_t2.name)
  1. from 包名.模块名 import 内容1,内容2…
import files2.abc.tesr3 as t3
print(t3.demo)

五、异常捕获

1、异常 - 程序中的错误

程序出现异常:会直接让程序结束运行,在那个位置出现异常,程序就在哪个位置结束

2、异常捕获

  • 让程序在出现异常的时候程序不结束,还可以接着往后执行

3、语法结构

1)语法:
  • 捕获所有异常

    try:
    代码段1(需要捕获异常的代码)
    except:
    代码段2(出现代码后会执行的代码)
    finally:
    代码段3(无论如何都会执行的代码)

  • 执行过程:

    先执行代码段1,执行代码段1的时候如果没有出现异常,就不执行代码段2;

    如果出现异常,程序马上执行代码段2

try:
    age=int(input('请输入年龄:'))
    print(f'age:{age}')
except:
    print('年龄输入有误!')
2)语法结构2 -
  • 捕获指定类型的异常

    try:
    代码段1(需要捕获异常的代码)
    except 异常类型:
    代码段2(出现代码后会执行的代码)
    finally:
    代码段3

try:
    print('abc'[4])
except IndexError:
    print('出错')   # 出错
try:
    print('abc'[4])
except KeyError:
    print('出错')  # 捕获不了其他类型的异常
    # IndexError: string index out of range
3)语法结构3 -
  • 捕获多个指定类型的异常

    try:
    代码段1(需要捕获异常的代码)
    except (异常类型1,异常类型2):
    代码段2(出现代码后会执行的代码)
    finally:
    代码段3

4)语法结构3 -

  • 捕获多个指定类型的异常,并作出不同处理

    try:
    代码段1(需要捕获异常的代码)
    except 异常类型1:
    代码段21(出现代码后会执行的代码)
    except (异常类型2,异常类型22):
    代码段21

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值