- 模块Module
- 定义
- 作用
- 调用同一个目录下的文件准备工作
- 使用方法
- 练习1
- 练习2
- 模块变量
- 加载过程
- 分类
- 内置模块time
- 练习1
- 练习2
- 总结
模块Module 定义
包含一系列数据、函数、类的文件,通常以.py结尾。
作用多人合作开发
调用同一个目录下的文件准备工作 使用方法"""
模块
"""
# 导入方式1:
#本质∶使用变量名module01关联模块地址
# import module01
# module01.fun01()
# my02 = module01.MyClass02()
# my02.fun02()
#模块1
# 模块1的fun01
# MyClass02--fun02
#as为导入的成员起另外一个名称
import module01 as m01
m01.fun01()
my02 = m01.MyClass02()
my02.fun02()
# 导入方式2:
# 本质︰将指定的成员导入到当前模块作用域中
#小心:导入进来的成员不要和当前模块成员名称相同
# from module01 import fun01
# from module01 import MyClass02
# fun01()# 模块1的fun01
# # 如果在当前模块中有fun01的函数:
# def fun01():
# print("当前模块fun01")
# fun01()#当前模块fun01
# my02 = MyClass02()
# my02.fun02()
# 模块1
# 模块1的fun01
# 当前模块fun01
# MyClass02--fun02
# 导入方式3:
# 本质︰将指定模块的所有成员导入到当前模块作用域中
#小心:导入进来的成员和其他模块成员冲突
# from module01 import *
# fun01()
# my02 = MyClass02()
# my02.fun02()
# 模块1
# 模块1的fun01
# MyClass02--fun02
module01.py
print("模块1")
def fun01():
print("模块1的fun01")
class MyClass02:
def fun02(self):
print("MyClass02--fun02")
练习1
将之前的Vector2和DoublelistHelper定义到
double_list_helper.py模块中。
在exercise01.py模块中,实现
(1)在二维列表中,获取13位置,向左,3个元素。
(2)在二维列表中﹐获取22位置,向上,2个元素。
(3)在二维列表中﹐获取03位置,向下,2个元素。
要求∶使用三种导入方式。
体会∶哪一种更合适。
import double_list_helper
#print(double_list_helper.DoublelistHelper.elements(double_list_helper.list01, double_list_helper.Vector2(1, 3), double_list_helper.Vector2.left(), 3))#['12', '11', '10']
# print(double_list_helper.DoublelistHelper.elements(double_list_helper.list01, double_list_helper.Vector2(2, 2), double_list_helper.Vector2.up(), 2))#['12', '02']
print(double_list_helper.DoublelistHelper.elements(double_list_helper.list01, double_list_helper.Vector2(0, 3), double_list_helper.Vector2.down(), 2))#['13', '23']
from double_list_helper import Vector2
from double_list_helper import DoublelistHelper
from double_list_helper import list01
# print(DoublelistHelper.elements(list01, Vector2(1, 3), Vector2.left(), 3))#['12', '11', '10']
#print(DoublelistHelper.elements(list01, Vector2(2, 2), Vector2.up(), 2))#['12', '02']
print(DoublelistHelper.elements(list01, Vector2(0, 3), Vector2.down(), 2))#['13', '23']
from double_list_helper import *
# print(DoublelistHelper.elements(list01, Vector2(1, 3), Vector2.left(), 3))#['12', '11', '10']
#print(DoublelistHelper.elements(list01, Vector2(2, 2), Vector2.up(), 2))#['12', '02']
print(DoublelistHelper.elements(list01, Vector2(0, 3), Vector2.down(), 2))#['13', '23']
double_list_helper.py
class Vector2:
def __init__(self,x,y):
self.x = x
self.y = y
@staticmethod
def left():
return Vector2(0, -1)
@staticmethod
def up():
return Vector2(-1, 0)
@staticmethod
def down():
return Vector2(1, 0)
list01 = [
["00", "01", "02", "03"],
["10", "11", "12", "13"],
["20", "21", "22", "23"],
]
list_result = []
class DoublelistHelper:
@staticmethod
def elements(target,vect_pos,vect_dir,count):
for item in range(count):
vect_pos.x += vect_dir.x
vect_pos.y += vect_dir.y
list_result.append(target[vect_pos.x][vect_pos.y])
return list_result
练习2
将学生管理系统分为四个模块:
M–> model.py 数据模块
V–> ui.py`界面模块
C–> bll.py 业务逻辑模块
将调用View的代码–> main.py 入口模块
model.py
"""
定义数据模型
"""
class StudentModel:
"""
学生模型
"""
def __init__(self,name="",age=0,score=0.0,id=0):
"""
创建学生对象
:param name::姓名,str类型
:param age:年龄,int类型
:param score:成绩,float类型
:param id: 编号(该学生对象的唯一标识)
"""
self.name = name
self.age =age
self.score = score
self.id = id
ui.py
"""
界面代码
"""
from model import *
from bll import *
class StudentManagerView:
"""
学生管理器视图
"""
def __init__(self):
self.__manager = StudentManagerController()
def __display_menu(self):
print("1)添加学生")
print("2)显示学生")
print("3)删除学生")
print("4)修改学生")
print("5)按照成绩升序显示学生")
def __select_menu(self):
item = input("请输入∶")
if item == "1":
self.__input_student()
elif item == "2":
self.__output_students(self.__manager.stu_list)
elif item == "3":
self.__delete_student()
elif item == "4":
self.__modify_student()
elif item == "5":
self.__output_student_by_score()
def main(self):
"""
界面视图入口
"""
while True:
self.__display_menu()
self.__select_menu()
def __input_student(self):
name = input("请输入姓名∶")
age = int(input("请输入年龄:"))
score = float(input("请翰入成绩∶"))
stu = StudentModel(name, age, score)
self.__manager.add_student(stu)
def __output_students(self,list_output):
for item in list_output:
print(item.id,item.name,item.age,item.score)
def __delete_student(self):
id = int(input("请输入编号∶"))
if self.__manager.remove_student(id):
print("删除成功")
else:
print ("删除失败")
def __modify_student(self):
stu = StudentModel()
stu.id = int(input("请输入需要修改的学生编号:"))
stu.name = input("请物入新的学生名称:")
stu.age = int(input("请输入新的学生年龄:"))
stu.score = float(input("请输入新的学生成绩∶"))
if self.__manager.update_student(stu):
print("修改成功")
else:
print("修改失败")
def __output_student_by_score(self):
self.__manager.order_by_score()
self.__output_students(self.__manager.stu_list)
bll.py
"""
业务逻辑处理
"""
class StudentManagerController:
"""
学生管理控制器,负责业务逻辑处理。
"""
# 类变量,表示初始编号。
init_id = 1000
def __init__(self):
self.__stu_list = []
@property
def stu_list(self):
"""
学生列表
:return: 存储学生对象的列表
"""
return self.__stu_list
def add_student(self,stu_info):
"""
添加一个新学生
:param stu_info:没有编号的学生信息
"""
stu_info.id = self.__generate_id()
#self.stu_list.append(stu_info)
self.__stu_list.append(stu_info)
def __generate_id(self):
StudentManagerController.init_id += 1
return StudentManagerController.init_id
def remove_student(self,id):
"""
根据编号移除学生信息
:param id:编号
:return:是否移除
"""
for item in self.__stu_list:
if item.id == id:
self.__stu_list.remove(item)
return True#表示移除成功
return False#表示移除失败
def update_student(self,stu_info):
"""
根据stu_info.id修改其他信息
:param stu_info: 学生对象
:return: 是否修改成功
"""
for item in self.__stu_list:
if item.id == stu_info.id:
item.name = stu_info.name
item.age = stu_info.age
item.score = stu_info.score
return True#表示修改成功
return False#表示修改失败
def order_by_score(self):
"""
根据成绩,对self.__stu_list进行升序排列
"""
for r in range(len(self.__stu_list)-1):
for c in range(r+1,len(self.__stu_list)):
if self.__stu_list[r].score > self.__stu_list[c].score:
self.__stu_list[r],self.__stu_list[c] = self.__stu_list[c],self.__stu_list[r]
main.py
"""
程序入口
"""
from ui import *
view = StudentManagerView()
view.main()
模块变量注意:from 模块 import *
模块中以下划线(_)开头的属性,不会被导入,通常称这些成员为隐藏成员。
- __all__变量:定义可导出成员,仅对from xx import * 语句有效。
exercise01.py
from module01 import *
MyClass.fun03()
_fun02()
module01.py
#定义:当前模块哪些成员可以被from 模块 import * 导入
__all__ = ["fun01","MyClass","_fun02"]
print("模块1")
def fun01():
print("模块1的fun01")
#只是在模块内部使用的成员,可以以单下划线开头。
#只限于from 模块 import * 有效
def _fun02():
print("模块1的fun02")
class MyClass:
@staticmethod
def fun03():
print("MyClass -- fun03")
- _doc__变量:文档字符串。
#可以通过该属性﹐查看文档注释
print(__doc__)
- __file__变量:模块对应的文件路径名。
#返回当前模块的绝对路径(从系统根目录开始计算的)
print(__file__)
- __name__变量:模块自身名字,可以判断是否为主模块。
当此模块作为主模块(第一个运行的模块)运行时,__name__绑定’main”,不是主模块,而是被其它模块导入时,存储模块名。
#现象
#主模块叫做∶__main__
#非主模块叫做∶真名
print(__name__)
#作用1∶测试代码,只有从当前模块运行才会执行。不是主模块不执行。
#被其他模块导入使用
#以下为测试代码,只有从当前模块运行才会执行。
if __name__ == "_main__":
#作用2:限制只能从当前模块才执行。只有是主模块才执行。
在main.py里面加if __name__ == "_main__":
加载过程
在模块导入时,模块的所有语句会执行。
,如果一个模块已经导入,则再次导入时不会重新执行模块内的语句。
- 内置模块(builtins),在解析器的内部可以直接使用。
- 标准库模块,安装Python时已安装且可直接使用。(random类就是标准库)
- 第三方模块(通常为开源),需要自己安装。
- 用户自己编写的模块(可以作为其他人的第三方模块)。
"""
时间处理
"""
import time
#1.获取当前时间戳(从1970年1月1日到现在经历的秒数)
#1652072713.4642925
print(time.time())
#时间元组(年,月,日,时,分﹐秒,一周的第几天,一年的第几天,夏令时)
#时间戳 ---》时间元组
print(time.localtime(1652072713))
#通过元组的 *** 作获取时问
tuple_time = time.localtime()
for item in tuple_time:
print(item)
print(tuple_time[1])#获取月
#通过类的 *** 作获取时问
print(type(tuple_time))
# print(time.struct_time)
print(tuple_time.tm_year)#获取年
#时间元组 --->时间戳
print(time.mktime(tuple_time))
#时间元组 -->元组
str_timo01 = time.strftime("%Y / %m / %d %H : %M : %S " ,tuple_time)
print(str_timo01)#2022 / 05 / 09 13 : 23 : 02
#str --> 时间元组
tuple_time02 = time.strptime(str_timo01,"%Y / %m / %d %H : %M : %S ")
print(tuple_time02)
练习1
定义函数,根据年月日,返回星期数。
"星期一“
"星期二”
"星期三”
思路∶
年月日–>时间元组
时问元组–>星期
星期–>格式
import time
def get_wday(year,month,day):
"""
获取星期数
:param year:年
:param month:月
:param day:天
:return:星期几
"""
tuple_time = time.strptime("%d - %d - %d"%(year,month,day), "%Y - %m - %d")
dict_weeks = {
0:"星期一",
1:"星期二",
2:"星期三",
3:"星期四",
4:"星期五",
5: "星期六",
6: "星期日",
}
return dict_weeks[tuple_time[6]]
re = get_wday(2022,5,9)
print(re)#星期一
练习2
练习2∶根据生日(年月日),计算活了多少天。
思路∶
年月日–>出生时间
当前时间–>出生时间
计算天数
import time
def life_days(year,month,day):
"""
根据生日计算活了多少天
:param year: 年
:param month: 月
:param day: 日
:return: 活的天数
"""
tuple_time = time.strptime("%d - %d - %d"%(year,month,day), "%Y - %m - %d")
life_time = time.time()-time.mktime(tuple_time)
return int(life_time / 60 / 60 // 24)
print(life_days(1991,10,12))#11167
总结
模块导入:
import 模块
模块.成员名
--------------------
import 模块 as 别名
别名.成员名
-------------------
from 模块 import 成员
直接使用成员
-------------------
from 模块 import *
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)