07-2 Python模块和命名空间

news2024/11/24 12:08:52

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:
        if len(list_person) == 0:
            print("通讯录没有联系人")
        else:
            print('删除联系人')
            # 3.1 获取删除的联系人姓名
            delete_xm = input("请输出要删除的联系人姓名:")
            # 3.2 根据姓名找到其所在字典,然后通过字典找到所在列表的下标
            flag = 0  # 标记,为1时,应该结束外层找字典的循环
            index = -1  # i就是字典在列表的下标
            for i in list_person:  # 找字典
                index += 1
                for key, value in i.items():
                    if key == "姓名" and value == delete_xm:
                        flag = 1
                        break
                if flag == 1:
                    break
        # 3.3 根据下标删除列表的元素
        list_person.pop(index)
        print("删除成功")
    # 4.修改联系人信息
    elif gongneng == 4:
        print('修改联系人信息')
        if len(list_person) == 0:
            print("通讯录没有联系人")
        else:
            #获取要修改的联系人姓名
            change_name = input("请输入要修改的联系人姓名:") 
            print(change_name)
            #总思路:从字典找到对应姓名,然后替换信息
            #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('查找联系人')
    # 6.退出
    elif gongneng == 6:
        print('# 退出')
        break

  • 函数形式版本:(待更新)

  • 模块化后版本:(待更新)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1297206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu编译文件安装SNMP服务

net-snmp源码下载 http://www.net-snmp.org/download.html 编译步骤 指定参数编译 ./configure --prefix/root/snmpd --with-default-snmp-version"2" --with-logfile"/var/log/snmpd.log" --with-persistent-directory"/var/net-snmp" --wi…

CSS3技巧36:让内容垂直居中的三种方式

让内容垂直居中,是一个很重要的应用情景,在很多场合都会需要。这也是面试的时候,一些考官喜欢拿来初面的小题目。 这里,小结下让内容垂直居中的三种方式。 当然,读者如果有更好的方法,也可以提出来。 基本…

scikit-learn实现线性回归

要学习scikit-learn,我们必须要到scikit-clearn的官网中去查看公式和原理 scikit-learn 官网 scikit-learn 中文社区 进入官网一以后我们找到回归,然后再有监督学习中找到线性模型 scikit-learn实现简单的线性回归 公式: L2范数是指向量中每个元素的平…

已通过考试和认证注册以及后续计划表

已通过考试和认证注册以及后续计划表 软考 - 计算机技术与软件专业技术资格(水平)考试信息系统集成及服务项目管理人员工程类考试计划你关注的证书样子 软考 - 计算机技术与软件专业技术资格(水平)考试 高级 信息系统项目管理师&…

vite+vue3实现动态路由

在做这个动态路由的时候踩了很多坑,其中大部分是粗心了 动态菜单主要是导入的方式 import.meta.glob 参考:功能 | Vite 官方中文文档 1、多层路由渲染(用3层路由做demo) 拿到接口的数据是后台直接处理好的结构,但是…

3_CSS层叠样式表基础

第3章-CSS层叠样式表基础 学习目标(Objective) 掌握标签选择器的使用掌握类选择器的使用了解id选择器和通配符选择器掌握font属性和color属性的应用 1.HTML的局限性 如果要改变下高度或者变一个颜色,就需要大量重复操作 总结: HTML满足不了设计者的需…

OpenCL学习笔记(三)手动编译开发库(win10+mingw64)

前言 有的小伙伴仍然在使用mingw编译器,这时只能重新编译opencl的sdk库。本文档简单记录下win10下,使用mingw11.20编译的过程,有需要的小伙伴可以参考下 一、安装所需软件 1.安装git,教程比较多,不再重复 2.安装cm…

放大镜是否可以会聚光线?为什么?

放大镜是否可以会聚光线?为什么? 实验日期:2019年8月24日 操作用具:放大镜,手电筒,一张白纸 猜 测:放大镜可以会聚光线,因为放大镜是凸透镜,凸透镜可以会聚光线。 实…

C#-快速剖析文件和流,并使用

目录 一、概述 二、文件系统 1、检查驱动器信息 2、Path 3、文件和文件夹 三、流 1、FileStream 2、StreamWriter与StreamReader 3、BinaryWriter与BinaryReader 一、概述 文件,具有永久存储及特定顺序的字节组成的一个有序、具有名称的集合; …

Nacos 2.3.0 正式发布,堪称最强!

2023年12月7日,Nacos 2.3.0,正式发布了它的最新版本。经过一个多月社区的精心测试与优化,新版本在功能和性能上均有显著提升。 Nacos 2.3.0的发布,可以说是一场关于配置管理的小型革命。它不仅仅是一个版本的迭代,更是…

Mybatis XML 多表查询

这篇需结合 <<Mybatis XML 配置文件>>那一篇博客一起看 工作中尽量避免使用多表查询,尤其是对性能要求非常高的项目 我们之前建了个用户表(代码在Mybatis XML配置文件那篇博客里),这次再建一个文章表,代码如下 : -- 创建⽂章表 DROP TABLE IF EXISTS articleinf…

armbian系统安装和卸载snmp服务(SNMPV2操作版本)

文章目录 说明基知干净卸载snmp服务并清除配置文件安装SNMPSNMPV2远程连接配置基本设备信息查询问题Errors were encountered while processing: snmpdCannot adopt OID…… 说明 由于各位小伙伴&#xff0c;可能在安装过程中出现意外或者其他情况&#xff0c;本文先说明卸载步…

金融专题 | 对复杂的金融工具进行设计、定价和对冲分析

金融行业使用 Financial Instruments Toolbox™ 执行现金流建模和收益率曲线拟合分析、计算价格和敏感度、查看价格演变&#xff0c;并使用普通股权和固定收益建模方法执行对冲分析。 借助该工具箱&#xff0c;您可以创建新的金融工具类型&#xff0c;使用参数拟合模型和息票剥…

预训练--微调

预训练–微调 一个很简单的道理&#xff0c;如果我们的模型是再ImageNet下训练的&#xff0c;那么这个模型一定是会比较复杂的&#xff0c;意思就是这个模型可以识别到很多种类别的即泛化能力很强&#xff0c;但是如果要它精确的识别是否某种类别&#xff0c;它的表现可能就不…

html、css类名命名思路整理

开发页面时&#xff0c;老是遇到起名问题&#xff0c;越想越头疼&#xff0c;严重影响开发进度&#xff0c;都是在想名字&#xff0c;现在做一下梳理&#xff0c;统一一下思想&#xff0c;希望以后能减少这块的痛苦。 命名规则 [功能名称]__[组成部分名称]--[样式名称] 思路…

小红书自动点赞工具,其成功分享与引流攻略从入门到精通

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 一、小红书引流的优势 小红书作为一个社交电商平台&#xff0c;具有巨大的引流潜力。其独特的UGC&#xff08;用户生成内容&#xff09;模式使得用户可以轻松地分享自己的购物心得…

python主流开发工具排名,python开发工具有哪些

本篇文章给大家谈谈python的开发工具软件有哪些&#xff0c;以及python主流开发工具排名&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 python中用到哪些软件 一、Python代码编辑器1、sublime Textsublime Text是一款非常流行的代码编辑器&#xff0c;支持P…

Python渗透测试——一、数据包的编辑工具——Scapy

Python渗透测试 一、Scapy简介二、Scapy中的分层结构三、Scapy中的常用函数四、在Scapy 中发送和接收数据包五、Scapy 中的抓包函数 一、Scapy简介 提到数据包(这里泛指帧、段和报文等)的构造&#xff0c;我们首先需要了解协议和分层这两个概念。在“互联世界的规则一协议”中…

概率论之 证明 正态分布的上a 分位点的对称的性质

公式(Z(a) -Z(1-a)) 表示正态分布的上(a)分位点与下(1-a)分位点在分布曲线上关于均值的对称性。 左侧 (Z(a))&#xff1a; 这是分布曲线上累积概率为(a)的那个点。也就是说&#xff0c;这是一个使得这个点及其左侧的面积占据整个曲线下方(a)的位置。 右侧 (Z(1-a))&#xff1…

网页设计--第6次课后作业

试用Vue相关指令完成对以下json数据的显示。显示效果如下&#xff1a; 其中&#xff1a;gender1 显示为女&#xff0c;gender2显示为男。价格超过30元&#xff0c;显示“有点小贵”。价格少于等于30元&#xff0c;则显示“价格亲民”。 data: {books: [{"id": "…