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 *
    • 解释器会将模块中的所有函数导入到当前程序中,模块中的所有函数可以在本程序直接使用
  • 示例:
 #1import mymoudleprint(mymoudle.now_time())#2from mymoudle import now_timeprint(now_time())#3from 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 += 1for key, value in i.items():if key == "姓名" and value == delete_xm:flag = 1breakif 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 += 1for key,value in i.items():if key == "姓名"  and value == change_name:  flag = 1breakif flag == 1:breakif 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.mzph.cn/news/207703.shtml

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

相关文章

一篇文章带你快速入门 Vue 核心语法

一篇文章带你快速入门 Vue 核心语法 一、为什么要学习Vue 1.前端必备技能 2.岗位多,绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能(Vue2Vue3) 二、什么是Vue 概念:Vue (读音 /vjuː/,类似于 view) …

Mysql 日期函数大全

一、时间函数 (一)、获取当前时间 1、NOW() 获取当前日期和时间,在程序一开始执行便拿到时间 返回格式 YYYY-MM-DD hh:mm:ss eg: NOW() 得到 2023-12-03 12:20:02 NOW(),SLEEP(2),NOW() 得到 2023-12-03 12:20:02 | 0 | 2023-…

目标检测——OverFeat算法解读

论文:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks 作者:Pierre Sermanet, David Eigen, Xiang Zhang, Michael Mathieu, Rob Fergus, Yann LeCun 链接:https://arxiv.org/abs/1312.6229 文章…

SpringAOP专栏二《原理篇》

上一篇SpringAOP专栏一《使用教程篇》-CSDN博客介绍了SpringAop如何使用,这一篇文章就会介绍Spring AOP 的底层实现原理,并通过源代码解析来详细阐述其实现过程。 前言 Spring AOP 的实现原理是基于动态代理和字节码操作的。不了解动态代理和字节码操作…

【C语言】函数递归详解(一)

目录 1.什么是递归: 1.1递归的思想: 1.2递归的限制条件: 2.递归举例: 2.1举例1:求n的阶乘: 2.1.1 分析和代码实现: 2.1.2图示递归过程: 2.2举例2:顺序打印一个整数的…

机器学习---集成学习的初步理解

1. 集成学习 集成学习(ensemble learning)是现在非常火爆的机器学习方法。它本身不是一个单独的机器学 习算法,而是通过构建并结合多个机器学习器来完成学习任务。也就是我们常说的“博采众长”。集 成学习可以用于分类问题集成,回归问题集成&#xff…

多线程并发Ping脚本

1. 前言 最近需要ping地址,还是挺多的,就使用python搞一个ping脚本,记录一下,以免丢失了。 2. 脚本介绍 首先检查是否存在True.txt或False.txt文件,并在用户确认后进行删除,然后从IP.txt的文件中读取IP地…

CSS——sticky定位

1. 大白话解释sticky定位 粘性定位通俗来说,它就是相对定位relative和固定定位fixed的结合体,它的触发过程分为三个阶段 在最近可滚动容器没有触发滑动之前,sticky盒子的表现为相对定位relative【第一阶段】, 但当最近可滚动容…

【MATLAB】tvfEMD信号分解+FFT+HHT组合算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 TVFEMDFFTHHT组合算法是一种结合了总体变分模态分解(TVFEMD)、傅里叶变换(FFT)和希尔伯特-黄变换(HHT)的信号分解方…

电子学会C/C++编程等级考试2021年06月(五级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字变换 给定一个包含5个数字(0-9)的字符串,例如 “02943”,请将“12345”变换到它。 你可以采取3种操作进行变换 1. 交换相邻的两个数字 2. 将一个数字加1。如果加1后大于9,则变为0 3. 将一个数字加倍。如果加倍后大于…

Python configparser 模块:优雅处理配置文件的得力工具

更多资料获取 📚 个人网站:ipengtao.com 配置文件在软件开发中扮演着重要的角色,而Python中的 configparser 模块提供了一种优雅而灵活的方式来处理各种配置需求。本文将深入介绍 configparser 模块的各个方面,通过丰富的示例代码…

嵌入式杂记 - MDK的Code, RO-data , RW-data, ZI-data意思

嵌入式杂记 - Keil的Code, RO-data , RW-data, ZI-data意思 MDK中的数据分类MCU中的内部存储分布MDK中数据类型存储Code代码段例子 RO-data 只读数据段例子 RW-data 可读写数据段例子 ZI-data 清零数据段例子 在嵌入式开发中,我们经常都会使用一些IDE,例…

Hadoop学习笔记(HDP)-Part.17 安装Spark2

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

Web前端 ---- 【Vue】Vuex的使用(辅助函数、模块化开发)

目录 前言 Vuex是什么 Vuex的配置 安装vuex 配置vuex文件 Vuex核心对象 actions mutations getters state Vuex在vue中的使用 辅助函数 Vuex模块化开发 前言 本文介绍一种新的用于组件传值的插件 —— vuex Vuex是什么 Vuex 是一个专为 Vue.js 应用程序开发的状态…

【ArcGIS Pro微课1000例】0053:基于SQL Server创建与启用地理数据库

之前的文章有讲述基于SQL Server创建企业级地理数据库,本文讲述在SQL Server中创建常规的关心数据库,然后在ArcGIS Pro中将其启用,转换为企业级地理数据库。 1. 在SQL Server中创建数据库** 打开SQL Server 2019,连接到数据库服务器。 展开数据库连接,在数据库上右键→新…

(四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)

一、无人机模型简介: 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献: [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、Tiki-taka算法(TTA&#xf…

基于SSH的java记账管理系统

基于SSH的java记账管理系统 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 项目类型:Java EE项目 项目名称:基于SSH的记账管理系统 项目架构:B/S架构 开发语言:Java语言 前端技术:HTML、CS…

初识优先级队列与堆

1.优先级队列 由前文队列queue可知,队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,在此情况下,使用队列queue显然不…

git常用命令指南

目录 一、基本命令 1、创建分支 2、切换分支 3、合并分支 4、初始化空git仓库 二、文件操作 1、创建文件 2、添加多个文件 3、查看项目的当前状态 4、修改文件 5、删除文件 6、提交项目 三、实际操作 1、创建目录 2、进入新目录 3、初始化空git仓库 4、创建文…

C++STL的string模拟实现

文章目录 前言string的成员变量成员函数构造函数拷贝构造赋值重载 模拟实现string各种接口print迭代器普通迭代器const迭代器 string比较大小push_backinsert 和 eraseinserterase reserve和resizereserveresize swapfindcout和cincoutcin 前言 今天要讲string的底层实现&…