模块
了解模块
-
为了使代码更容易维护,提高代码重用价值,可以将一组相关功能的代码写入一个单独的py文件中供别人导入使用,这个.py文件就被称作是一个模块
-
模块分类:
-
第一类:内置模块,也叫做标准库。此类模块就是python解释器给你提供的。
-
第二类:第三方模块,第三方库。一些python大神写的非常好用的模块,必须通过pip install 指令安装的模块。
-
第三类:自定义模块。我们自己在项目中定义的一些模块。
-
导入模块
导入模块基础代码
# 导入一个模块本质上就是执行了一个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"休眠完毕")
- 导入模块的四种方式:
-
import 模块名
语法:
import 模块名
import 模块名1,模块名2....
模块名.功能名( ) -
from 模块名 import 功能名
语法: from 模块名 import 功能1,功能2,功能3 -
from 模块名 import *
语法:
from 模块名 import * -
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
# 注意:定义模块别名后不能在模块使用原名
制作模块
- 脚本,一个文件就是一个程序,用来被执行
- 模块,文件中存放着一堆功能,用来被导入使用
-
定义模块:在Python种,每个python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则。
-
需求:
- 新建一个python文件,命名为module1.py并定义testA函数,testA函数完成2个数字的加法运算。
- 测试模块
- 调用模块
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
# 最后执行
# 最终执行