模块 Module
定义
- 包含一系列数据、函数、类的文件,通常以
.py
结尾
作用
- 让一些相关的数据,函数,类有逻辑的组织在一起,使逻辑结构更加清晰
导入
import
- 作用:将模块整体导入到当前模块中
- 使用:模块名.成员
# 语法
import 模块名
import 模块名 as 别名
from import
- 作用:将模块内的成员导入到当前模块作用域中
- 使用:直接使用成员名
# 语法
from 模块名 import 成员名
from 模块名 import 成员名 as 别名
from 模块名 import *
被导入代码
"""
module01.py
"""
def func01():
print("module01 - func01执行喽")
def func02():
print("module01 - func02执行喽")
导入代码
# 导入方式1:import 模块名
# 使用:模块名.成员
# 原理:创建变量名记录文件地址,使用时通过变量名访问文件中成员
# 适用性:适合面向过程(全局变量、函数)
import module01
module01.func01()
# 导入方式2.1:from 文件名 import 成员
# 使用:直接使用成员
# 原理:将模块的成员加入到当前模块作用域中
# 注意:命名冲突
# 适用性:适合面向对象(类)
from module01 import func01
def func01():
print("demo01 - func01")
func01() # 调用的是自己的func01
# 导入方式2.2:from 文件名 import *
from module01 import *
func01()
func02()
时间模块使用
"""
标准库模块
time 时间模块
"""
import time
# 人类时间:2021年11月18日 16:32:25
# -- 时间元组(年,月,日,时,分,秒,星期,年的第几天,夏令时)
time_tuple = time.localtime()
print(time_tuple[0]) # 年
print(time_tuple[6]) # 星期
print(time_tuple[-3]) # 星期
print(time_tuple[:3]) # 年月日
print(time_tuple[3:6]) # 时分秒
# 机器时间
# -- 时间戳:从1970年到现在经过的秒数
print(time.time()) # 1637224879.6712253
# 时间元组 <--> 时间戳
# 语法:时间戳 = time.mktime(时间元组)
print(time.mktime(time_tuple))
# 语法:时间元组 = time.localtime(时间戳)
print(time.localtime(1637224879.6712253))
# 时间元组 <--> 字符串
# 语法:字符串 = time.strftime(格式,时间元组)
print(time.strftime("%y/%m/%d %H:%M:%S", time_tuple))
# 2021/11/18 16:51:49
print(time.strftime("%Y/%m/%d %H:%M:%S", time_tuple))
# 2021年11月18日 16时53分32秒
print(time.strftime("%Y年%m月%d日 %H时%M分%S秒", time_tuple))
# 语法:时间元组 = time.strptime(字符串,格式)
print(time.strptime("2021年11月18日 16时53分32秒", "%Y年%m月%d日 %H时%M分%S秒"))
模块变量
- doc : 文档字符串。
- name : 模块自身名字,可以判断是否为主模块
当此模块作为主模块(第一个运行的模块)运行时,name绑定
'__main__'
,不是主模块,而是被其它模块导入时,存储模块名
# 只有是主模块才会执行该if内的代码
if __name__ == '__main__':
pass
加载过程和模块分类
- 在模块导入时,模块的所有语句会执行
- 如果一个模块已经导入,则再次导入时不会重新执行模块内的语句
- 内置模块(builtins),在解析器的内部可以直接使用。
- 标准库模块,安装Python时已安装且可直接使用。
- 第三方模块(通常为开源),需要自己安装。
- 用户自己编写的模块(可以作为其他人的第三方模块)
包package
将模块以文件夹的形式进行分组管理,让一些相关的模块组织在一起,使逻辑结构更加清晰
导入
import
- 作用:将包中
__init__
模块内整体导入到当前模块中 - 使用:包.成员
# 语法
import 包
import 包 as 别名
from import
- 作用:将包中
__init__
模块内的成员导入到当前模块作用域中 - 使用:直接使用成员名
# 语法
from 包 import 成员
from 包 import 成员 as 别名
被导入代码
"""
package01/
module01.py
"""
def func01():
print("func01执行了")
def func02():
print("func02执行了")
__init__.py
"""
package01/
__init__.py
"""
import package01.module01
from package01.module01 import func01
导入代码
"""
main.py
"""
# 方式1:import 包 as 别名
import package01 as p
p.module01.func01()
p.func02()
# 方式2:from 包 import 成员
from package01 import module01,func02
module01.func01()
func02()
异常处理 Error
运行时检测到的错误,当异常发生时,程序不会再向下执行,而转到函数的调用语句
- 常见异常类型
- 名称异常(NameError):变量未定义
- 类型异常(TypeError):不同类型数据进行运算
- 索引异常(IndexError):超出索引范围
- 属性异常(AttributeError):对象没有对应名称的属性
- 键异常(KeyError):没有对应名称的键
- 异常基类Exception
# 语法
# 作用:将程序由异常状态转为正常流程
try:
可能触发异常的语句
except 错误类型1 [as 变量1]:
处理语句1
except 错误类型2 [as 变量2]:
处理语句2
except Exception [as 变量3]:
不是以上错误类型的处理语句
else:
未发生异常的语句
finally:
无论是否发生异常的语句
说明
as
子句是用于绑定错误对象的变量,可以省略except
子句可以有一个或多个,用来捕获某种类型的错误。else
子句最多只能有一个。finally
子句最多只能有一个,如果没有except
子句,必须存在。- 如果异常没有被捕获到,会向上层(调用处)继续传递,直到程序终止运行
raise 语句
抛出一个错误,让程序进入异常状态,在程序调用层数较深时,向主调函数传递错误信息要层层return比较麻烦,所以人为抛出异常,可以直接传递错误信息
class Wife:
def __init__(self, age):
self.age = age
@property
def age(self):
return self.__age
@age.setter
def age(self, value):
if 20 <= value <= 60:
self.__age = value
else:
# 创建异常 -- 抛出 错误信息
raise Exception("我不要","if 20 <= value <= 60",1001)
# -- 接收 错误信息
while True:
try:
age = int(input("请输入你老婆年龄:"))
w01 = Wife(age)
break
except Exception as e:
print(e.args) # ('我不要', 'if 30 <= value <= 60', 1001)
最后一次更新于2022-10-28 16:24
0 条评论