1. 模块
-
概念:其实就是一个Python文件,正常文件有的变量,函数,类,模块都有
-
功能:模块可以被其它程序引入,以使用该模块中的函数等功能。
-
示例:
test-module.py
调用mymodule.py
模块中的now_time()方法- 新建
mymodule.py
文件
#mymodule.py import time #导入系统标准库模块 def now_time(): #设计显示系统当前时间的函数 nt=time.localtime() s=("%02d:%02d:%02d"%nt[3:6]) print(s) time.sleep(1)
- 新建
test-module.py
文件
#test-module.py import mymodule print("现在的时间是:",end=' ') mymodule.now_time() #通过其它模块的函数,显示系统当前时间
- 在
test-module.py
文件下运行,查看结果
- 新建
1.1 模块导入方法(掌握)
分类:有标准模块、自定义模块和第三方库之分。
- import 模块名
- 解释器会按系统搜索路径将指定模块导入当前程序中,这种方式,在使用被导入模块中的函数时,需用“模块名.函数名”的格式
- from 模块名 import 函数
- 解释器会将模块中的指定函数单个导入到当前程序中,这种方式,在使用被导入模块中的函数时,前面无需加“模块名.”,直接使用函数名。 (3)
- from 模块名 import *
- 解释器会将模块中的所有函数导入到当前程序中,模块中的所有函数可以在本程序直接使用
- 示例:
#1
import mymoudle
print(mymoudle.now_time())
#2
from mymoudle import now_time
print(now_time())
#3
from mymoudle import *
print(now_time())
#4起别名
import mymoudle as my
#使用mymoudle模块中的now_time函数
# 获取系统当前时间
#别名.函数名()
my.now_time()
my.test()
2. 命名空间
- 概念:在编写Python程序的过程中,如果要使用变量和函数,都需要先对变量和函数命名后才能使用。 Python会把命名后的变量和函数分配到不同的命名空间(Namespace),并通过名称来识别它们。
- 作用:
- 是不同的命名空间对应不同的作用域,和作用域类似
- 防止命名冲突
- 分类:
- 局部命名空间(Local):每个函数所拥有的命名空间,记录了函数中定义的所有变量,包括函数的参数、内部定义的局部变量
- 全局命名空间(Global):每个模块加载执行时创建的,记录了模块中定义的变量,包括模块中定义的函数、类、其他导入的模块、模块级的变量与常量
- 内建命名空间(Built-in):是Python自带的,任何模块均可以访问,放着内置的函数和异常
3.总结
重点画框的部分,
作用域和命名空间,重点理解作用域
模块:掌握模块使用方法,和4种导入方式
练习:
改写用户通讯录系统,
-
把所有面向过程的方法,改写成函数形式,运行并、截图
-
函数形式改写成模块形式,运行并截图
最初版本:
-
截图:
print("""======================
欢迎使用通讯录
1.添加联系人
2.查看通讯录
3.删除联系人
4.修改联系人信息
5.查找联系人
6.退出
== == == == == == == == == == = """)
list_person = [] # 存放每个人的信息列表
while (True):
gongneng = eval(input("请输入功能序号:"))
# 1.添加联系人
if gongneng == 1:
print('添加功能')
ximing = input("请输入联系人的姓名:")
shouji = input("请输入联系人的手机号:")
youxiang = input("请输入联系人的邮箱:")
dizhi = input("请输入联系人的地址:")
dict_person = {"姓名": ximing, "手机号": shouji,
"邮箱": youxiang, "地址": dizhi}
list_person.append(dict_person)
# 2.查看通讯录
elif gongneng == 2:
print('查看通讯录')
if len(list_person) == 0:
print("通讯录没有联系人")
else:
for i in list_person: # 此时从列表取出的元素是字典,存在i里面
# 打印一个人的所有信息
for key, value in i.items():
print(f"{key}:{value}")
print("-----------")
# 3.删除联系人
elif gongneng == 3:
# 列表长度不为0,说明通讯录有人
if len(list_person) != 0:
print("3.删除联系人")
index = -1 # 存放的字典的下标
flag = 0 # 标记找到了对应的字典
# 通过比较姓名,找到该用户所在的字典,通过字典找到所在列表的下标
remove_nm = input("请输入要删除的联系人的姓名:")
# 外层循环找的列表中的元素,
for i in list_person: # i是字典
index = index + 1
# 内层循环,找的字典里的键值对
for key, value in i.items():
if key == "姓名" and value == remove_nm:
flag = 1
break
# 外面break执行的前提是里面已经break了
if flag == 1:
break
if flag == 1:
list_person.pop(index)
print("删除成功!")
else:
print("删除失败,通讯录没有要删除的联系人")
else:
print("通讯录没有联系人")
# 4.修改联系人信息
elif gongneng == 4:
print('修改联系人信息功能:')
if len(list_person) == 0:
print("通讯录没有联系人")
else:
# 获取要修改的联系人姓名
change_name = input("请输入要修改的联系人姓名:")
# 总思路:从字典找到对应姓名,然后替换信息
# 1.遍历列表,获取每一个元素(字典,也是每个人的个人信息)
index = -1 # 当前元素所在列表下标
flag = 0 # 值为1时,标记已经找到对应下标
for i in list_person:
index += 1
for key, value in i.items():
if key == "姓名" and value == change_name: #
flag = 1
break
if flag == 1:
break
if flag == 1:
# 2.找到了下标,修改信息
list_person[index]["姓名"] = input("请输入新姓名:")
list_person[index]["手机号"] = input("请输入新手机号:")
list_person[index]["邮箱"] = input("请输入新邮箱:")
list_person[index]["地址"] = input("请输入新地址:")
else:
print("没有该联系人")
# 5.查找联系人
elif gongneng == 5:
print('查找联系人')
if len(list_person) == 0:
print("通讯录没有联系人")
else:
# 获取要查找的联系人姓名
search_name = input("请输入要查找的联系人姓名:")
# 总思路:从字典找到对应姓名,然后展示信息
# 1.遍历列表,获取每一个元素(字典,也是每个人的个人信息)
index = -1 # 当前元素所在列表下标
flag = 0 # 值为1时,标记已经找到对应下标
for i in list_person:
index += 1
for key, value in i.items():
if key == "姓名" and value == search_name: #
flag = 1
break
if flag == 1:
break
# 当flag== 1时,说明找到了信息的下标,此时存在index中
# list_person[index]代表查找的目标字典
if flag == 1:
for key, value in list_person[index].items():
print(f"{key}:{value}")
else:
print("查无此人!")
# 6.退出
elif gongneng == 6:
print('# 退出')
break
else:
print("功能序号不正确!")
函数形式版本:
# 0.展示菜单
def show_menu():
print("=" * 20)
print("欢迎使用通讯录")
print("1.添加联系人")
print("2.查看通讯录")
print("3.删除联系人")
print("4.修改联系人信息")
print("5.查找联系人")
print("6.退出")
print("=" * 20)
# 1.添加联系人
def add_person():
print('添加功能')
ximing = input("请输入联系人的姓名:")
shouji = input("请输入联系人的手机号:")
youxiang = input("请输入联系人的邮箱:")
dizhi = input("请输入联系人的地址:")
dict_person = {"姓名": ximing, "手机号": shouji,
"邮箱": youxiang, "地址": dizhi}
list_person.append(dict_person)
# 2.查看通讯录
def show_person():
print('查看通讯录')
if len(list_person) == 0:
print("通讯录没有联系人")
else:
for i in list_person: # 此时从列表取出的元素是字典,存在i里面
# 打印一个人的所有信息
for key, value in i.items():
print(f"{key}:{value}")
print("-----------")
# 3.删除联系人
def del_person():
# 列表长度不为0,说明通讯录有人
if len(list_person) != 0:
print("3.删除联系人")
index = -1 # 存放的字典的下标
flag = 0 # 标记找到了对应的字典
# 通过比较姓名,找到该用户所在的字典,通过字典找到所在列表的下标
remove_nm = input("请输入要删除的联系人的姓名:")
# 外层循环找的列表中的元素,
for i in list_person: # i是字典
index = index + 1
# 内层循环,找的字典里的键值对
for key, value in i.items():
if key == "姓名" and value == remove_nm:
flag = 1
break
# 外面break执行的前提是里面已经break了
if flag == 1:
break
if flag == 1:
list_person.pop(index)
print("删除成功!")
else:
print("删除失败,通讯录没有要删除的联系人")
else:
print("通讯录没有联系人")
#4 修改联系人
def modify_person():
print('修改联系人信息功能:')
if len(list_person) == 0:
print("通讯录没有联系人")
else:
# 获取要修改的联系人姓名
change_name = input("请输入要修改的联系人姓名:")
# 总思路:从字典找到对应姓名,然后替换信息
# 1.遍历列表,获取每一个元素(字典,也是每个人的个人信息)
index = -1 # 当前元素所在列表下标
flag = 0 # 值为1时,标记已经找到对应下标
for i in list_person:
index += 1
for key, value in i.items():
if key == "姓名" and value == change_name: #
flag = 1
break
if flag == 1:
break
if flag == 1:
# 2.找到了下标,修改信息
list_person[index]["姓名"] = input("请输入新姓名:")
list_person[index]["手机号"] = input("请输入新手机号:")
list_person[index]["邮箱"] = input("请输入新邮箱:")
list_person[index]["地址"] = input("请输入新地址:")
else:
print("没有该联系人")
#5 搜索联系人
def search_person():
print('查找联系人')
if len(list_person) == 0:
print("通讯录没有联系人")
else:
# 获取要查找的联系人姓名
search_name = input("请输入要查找的联系人姓名:")
# 总思路:从字典找到对应姓名,然后展示信息
# 1.遍历列表,获取每一个元素(字典,也是每个人的个人信息)
index = -1 # 当前元素所在列表下标
flag = 0 # 值为1时,标记已经找到对应下标
for i in list_person:
index += 1
for key, value in i.items():
if key == "姓名" and value == search_name: #
flag = 1
break
if flag == 1:
break
# 当flag== 1时,说明找到了信息的下标,此时存在index中
# list_person[index]代表查找的目标字典
if flag == 1:
for key, value in list_person[index].items():
print(f"{key}:{value}")
else:
print("查无此人!")
# 存放每个人的信息列表
list_person = []
#执行主程序
while (True):
show_menu()
gongneng = eval(input("请输入功能序号:"))
# 1.添加联系人
if gongneng == 1:
add_person()
# 2.查看通讯录
elif gongneng == 2:
show_person()
# 3.删除联系人
elif gongneng == 3:
del_person()
# 4.修改联系人信息
elif gongneng == 4:
modify_person()
# 5.查找联系人
elif gongneng == 5:
search_person()
# 6.退出
elif gongneng == 6:
print('# 退出')
break
else:
print("功能序号不正确!")
模块化后版本:
- 新建
address_book_main.py
文件存放主程序代码
from address_book import *
#执行主程序
show_menu()#显示菜单
while (True):
gongneng = eval(input("请输入功能序号:"))
# 1.添加联系人
if gongneng == 1:
add_person()
# 2.查看通讯录
elif gongneng == 2:
show_person()
# 3.删除联系人
elif gongneng == 3:
del_person()
# 4.修改联系人信息
elif gongneng == 4:
modify_person()
# 5.查找联系人
elif gongneng == 5:
search_person()
# 6.退出
elif gongneng == 6:
print('# 退出')
break
else:
print("功能序号不正确!")
- 新建
address_book_function.py
文件存放所有功能代码
# 存放每个人的信息列表
list_person = []
# 0.展示菜单
def show_menu():
print("=" * 20)
print("欢迎使用通讯录")
print("1.添加联系人")
print("2.查看通讯录")
print("3.删除联系人")
print("4.修改联系人信息")
print("5.查找联系人")
print("6.退出")
print("=" * 20)
# 1.添加联系人
def add_person():
print('添加功能')
ximing = input("请输入联系人的姓名:")
shouji = input("请输入联系人的手机号:")
youxiang = input("请输入联系人的邮箱:")
dizhi = input("请输入联系人的地址:")
dict_person = {"姓名": ximing, "手机号": shouji,
"邮箱": youxiang, "地址": dizhi}
list_person.append(dict_person)
# 2.查看通讯录
def show_person():
print('查看通讯录')
if len(list_person) == 0:
print("通讯录没有联系人")
else:
for i in list_person: # 此时从列表取出的元素是字典,存在i里面
# 打印一个人的所有信息
for key, value in i.items():
print(f"{key}:{value}")
print("-----------")
# 3.删除联系人
def del_person():
# 列表长度不为0,说明通讯录有人
if len(list_person) != 0:
print("3.删除联系人")
index = -1 # 存放的字典的下标
flag = 0 # 标记找到了对应的字典
# 通过比较姓名,找到该用户所在的字典,通过字典找到所在列表的下标
remove_nm = input("请输入要删除的联系人的姓名:")
# 外层循环找的列表中的元素,
for i in list_person: # i是字典
index = index + 1
# 内层循环,找的字典里的键值对
for key, value in i.items():
if key == "姓名" and value == remove_nm:
flag = 1
break
# 外面break执行的前提是里面已经break了
if flag == 1:
break
if flag == 1:
list_person.pop(index)
print("删除成功!")
else:
print("删除失败,通讯录没有要删除的联系人")
else:
print("通讯录没有联系人")
#4 修改联系人
def modify_person():
print('修改联系人信息功能:')
if len(list_person) == 0:
print("通讯录没有联系人")
else:
# 获取要修改的联系人姓名
change_name = input("请输入要修改的联系人姓名:")
# 总思路:从字典找到对应姓名,然后替换信息
# 1.遍历列表,获取每一个元素(字典,也是每个人的个人信息)
index = -1 # 当前元素所在列表下标
flag = 0 # 值为1时,标记已经找到对应下标
for i in list_person:
index += 1
for key, value in i.items():
if key == "姓名" and value == change_name: #
flag = 1
break
if flag == 1:
break
if flag == 1:
# 2.找到了下标,修改信息
list_person[index]["姓名"] = input("请输入新姓名:")
list_person[index]["手机号"] = input("请输入新手机号:")
list_person[index]["邮箱"] = input("请输入新邮箱:")
list_person[index]["地址"] = input("请输入新地址:")
else:
print("没有该联系人")
#5 搜索联系人
def search_person():
print('查找联系人')
if len(list_person) == 0:
print("通讯录没有联系人")
else:
# 获取要查找的联系人姓名
search_name = input("请输入要查找的联系人姓名:")
# 总思路:从字典找到对应姓名,然后展示信息
# 1.遍历列表,获取每一个元素(字典,也是每个人的个人信息)
index = -1 # 当前元素所在列表下标
flag = 0 # 值为1时,标记已经找到对应下标
for i in list_person:
index += 1
for key, value in i.items():
if key == "姓名" and value == search_name: #
flag = 1
break
if flag == 1:
break
# 当flag== 1时,说明找到了信息的下标,此时存在index中
# list_person[index]代表查找的目标字典
if flag == 1:
for key, value in list_person[index].items():
print(f"{key}:{value}")
else:
print("查无此人!")