07-2 Python模块和命名空间

1. 模块

  • 概念:其实就是一个Python文件,正常文件有的变量,函数,类,模块都有

  • 功能:模块可以被其它程序引入,以使用该模块中的函数等功能。

  • 示例:test-module.py调用mymodule.py模块中的now_time()方法

    1. 新建mymodule.py文件
    #mymodule.py
    import time          #导入系统标准库模块
    def now_time():   #设计显示系统当前时间的函数
        nt=time.localtime()
        s=("%02d:%02d:%02d"%nt[3:6])
        print(s)
        time.sleep(1)
    
    1. 新建 test-module.py文件
    #test-module.py
    import mymodule
    print("现在的时间是:",end=' ')
    mymodule.now_time()   #通过其它模块的函数,显示系统当前时间
    
    1. test-module.py文件下运行,查看结果

1.1 模块导入方法(掌握)

分类:有标准模块、自定义模块和第三方库之分。

  1. import 模块名
    • 解释器会按系统搜索路径将指定模块导入当前程序中,这种方式,在使用被导入模块中的函数时,需用“模块名.函数名”的格式
  2. from 模块名 import 函数
  • 解释器会将模块中的指定函数单个导入到当前程序中,这种方式,在使用被导入模块中的函数时,前面无需加“模块名.”,直接使用函数名。 (3)
  1. 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种导入方式
image-20231207093754717

练习:

改写用户通讯录系统,

  1. 把所有面向过程的方法,改写成函数形式,运行并、截图

  2. 函数形式改写成模块形式,运行并截图

最初版本:

  • 截图:

    image-20231207113629557
    image-20231207170559711

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("功能序号不正确!")

模块化后版本:

  1. 新建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("功能序号不正确!")
  1. 新建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("查无此人!")
  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值