Python——10 模块,包,异常

发布时间 2023-08-15 15:37:52作者: 未翻身的咸鱼

模块

了解模块

  • 为了使代码更容易维护,提高代码重用价值,可以将一组相关功能的代码写入一个单独的py文件中供别人导入使用,这个.py文件就被称作是一个模块

  • 模块分类:

    1. 第一类:内置模块,也叫做标准库。此类模块就是python解释器给你提供的。

    2. 第二类:第三方模块,第三方库。一些python大神写的非常好用的模块,必须通过pip install 指令安装的模块。

    3. 第三类:自定义模块。我们自己在项目中定义的一些模块。

导入模块

导入模块基础代码
# 导入一个模块本质上就是执行了一个py文件

# random 随机数模块
# time处理时间模块
# 1. 导入random模块
# import random # 导图一个模块
# 注意:没有用的时候时灰色的,用了才有颜色区分

import random, time

# 2. 使用模块中的函数, 语法:模块名.功能名()
# randint ()的作用:实现随机生成数字闭区间的功能
num = random.randint(1, 5)  # 1和5也可以取到
print(num)
# sleep()休眠
time.sleep(2)  # 休眠2秒
time.sleep(2)
print(f"休眠完毕")
  • 导入模块的四种方式:
  1. import 模块名
    语法:
    import 模块名
    import 模块名1,模块名2....
    模块名.功能名( )

  2. from 模块名 import 功能名
    语法: from 模块名 import 功能1,功能2,功能3

  3. from 模块名 import *
    语法:
    from 模块名 import *

  4. as定义别名
    语法:
    import 模块名 as 别名
    from 模块名 import 功能名 as 别名

# 1. 导入方式:import 模块名 使用方式: 模块民.功能名()
# 需求:使用math模块下的sqrt函数进行开平方计算
import math  # 导入数学计算的一个模块
# sqrt 对变量取平方根
print(math.sqrt(9))  # 返回浮点数3.0

# 2.1 导入方式: from 模块名 import 功能名 使用方式:功能名()
from math import sqrt
print(sqrt(9))  # 3.0

# 2.2 在同一个模块中导入多个函数:from 模块名 import 功能1,功能2,功能3……
# fabs:返回数字的绝对值  fmod:返回余数
from math import sqrt, fabs, fmod
print(sqrt(16))  # 4.0
print(fabs(-3))  # 3.0
print(fmod(8, 3))  # 2.0


# 3. from 模块名 import *
# 把模块中的所有的内容全部导入
from math import *
print(sqrt(16))  # 4.0
print(fabs(-3))  # 3.0
print(fmod(8, 3))  # 2.0

# 4.1 import 模块名 as 别名 ——> 给模块起别名
import  math as shuxue
print(shuxue.fabs(-18))
# 4.2 from 模块名 import  功能名 as 别名 ——> 给功能起别名
from  math  import sqrt as kaipingfang
print(kaipingfang(9))  # 3.0
# 注意:定义模块别名后不能在模块使用原名

制作模块

  1. 脚本,一个文件就是一个程序,用来被执行
  2. 模块,文件中存放着一堆功能,用来被导入使用
  • 定义模块:在Python种,每个python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则。

  • 需求:

    1. 新建一个python文件,命名为module1.py并定义testA函数,testA函数完成2个数字的加法运算。
    2. 测试模块
    3. 调用模块
def  testA(a,b):
    return a+b




from module1 import *
print(testA(1, 3))
# 若模块和方法名都出现红下划线,需要将模块放到目录中
# 解决办法:邮件文件所在的目录——> Mark Directory as ——> Sources Root

name 变量

  • name 变量是python的内置变量。他是每个python模块必备的属性,它的值取决于你是如何执行这段代码的。
if __name__ ==  "__main__"
def testA(a, b):
    return a + b


# 定义的变量
name = "ikun"

# 系统变量__name__
# 1. 入伙时在当前文件夹打印文件,值是__main__
# 2. 如果被其他文件导入,值是该模块的模块名(module1)

print(__name__)  # __main__

if __name__ == "__main__":  # 放在if语句中的代码是不能够被其他文件锁导入执行
    print(testA(1, 1))
# if __name__ == "__main__":
# 1. 用来控制py文件在不同的应用场景下执行不同的逻辑
# 2. 系统变量 __name__
# 3. 如果在当前文件打印,结果是__mian__
# 4.如果被其他文件导入,值是该模块的模块名(module1)
# 5.相当于是python弄你的程序入口

包基础

  • 概念:包就是项目结构中的文件夹/目录
    包含有__init__.py文件的文件夹

作用:包作用于将不同的模块进行分类管理,包本身不具有具体的含义,仅用于文件分层管理

  • 为什么使用包:随着功能越写越多,我们无法将所有功能都放到一个文件中,于是我们使用模块去组织功能,而随着模块越来越多,我们就需要用文件夹将模块文件组织起来,以此来提高程序的结构性和可维护性

__all__变量

  • __ all__ 变量的值是一个列表,存储的是当前模块中一些成员(变量、函数或者类)的名称。通过在模块文件中设置 __ all__ 变量,当其它文件以“from 模块名 import *”的形式导入该模块时,该文件中只能使用 __ all__ 列表中指定的成员

Demo02包:

# init文件
# 尽量保证init文件里面简洁
print("这是包")
__all__ = ["register"]  # 限制当导入全部包时,仅能导入register模块
# from Demo02 import * 仅能导入register模块



# login文件
def log():
    print("这是登录函数")


# register文件
def add(a, b):
    return a + b



# import 包名
# import Demo02
from Demo02 import register,login
print(register.add(1, 1))  # 2
login.log()
#  __all__列表他是可以控制模块导入的行为的
# 这是包
# 2
# 这是登录函数

异常

异常基础

异常机制同Java

异常处理

语法格式一:
		try:
     		可能引发异常现象的代码  
			  # 不确定是否能够正常执行的代码

		except 异常类型:
     		出现异常现象的处理代码  
			  # 出现异常时希望执行的代码
print("a")

# try:
#     a
# except:
#     print("错误!")


# try:
#     print(a)
# except TypeError:  # TypeError类型错误
#     # 不是类型错误依然报错
#     print("错误!")


# 捕获多个异常
try:
    print(a)
except(NameError, TypeError):  # NameError命名错误 TypeError类型错误
    print("错误!")


# 定义的元组类型
tu = (NameError, TypeError) 
print(type(tu)) # <class 'tuple'>
try:
    print(a)
except tu:  # NameError命名错误 TypeError类型错误
    print("错误!")



# 将错误信息取别名
try:
    print(a)
except NameError as error: # NameError命名错误 TypeError类型错误
    # as error 相当于把异常信息保存在error里面,error是变量名,可自己定义。
    print(error)  # name 'a' is not defined

# 万能异常
try:
    print(a)
except Exception as e: #Exception是万能异常,可以捕获到任意的异常
    print(e)  # name 'a' is not defined


语法格式二:
		try:
                    可能引发异常现象的代码
		except: 
                    出现异常现象的处理代码
		else:
                    try代码块结束后运行的代码

# 错误执行except 无错误会执行else finally无论如何都会执行
try:
    print("a")
except Exception:
    print("错误!")
else:
    print("最后执行")
finally:
    print("最终执行")

    # a
    # 最后执行
    # 最终执行