10_python——模块

news2024/11/29 0:51:14

目录

模块的概述

自定义模块

Python中的包

以主程序的形式执行

引用其他模块


模块的概述

  1. 什么是模块:在python中模块就是python程序,一个模块就是一个*.py的文件,通常情况下把能够实现某一特定功能的代码放置在一个文件中作为一个模块,从而方便其他程序和脚本导入使用
  2. 模块的优势
  • 可以有效避免函数名和变量名冲突,因为每一个模块都有各自的作用域和变量名冲突
  • 更容易查找代码,因为引入模块这个文件就会更小,并且分工明确
  • 提高代码的可重用性,因为创建模块后可以被各种程序和代码重复调用
  • 有选择的使用,可以使用不同的部分来组合完成不同的功能

自定义模块

1. 自定义模块:就是自己编写的python程序也就是python文件                

2.  一般情况模块可以包含:函数、变量、类、可执行代码

3. 创建模块

        模块名:不能是python自带的标准模块名

        示例:  

#编写模块文件add.py
def add(a,b):
    return round(a + b,3)

#编写调用文件num.py
import add
print("a + b")
a = 0.213
b = 1.34
print(add.add(a,b))

4. 导入模块

        (1)使用import导入模块

                通过这种方法导入模块,我们必须使用模块名或者别名来引用对应的函数或者变量,这是因为在python中每执行一条import语句就会创建一个新的命名空间用来执行该模块相关的所有语句

                命名空间:类似于边界,可以区分不同类的同名方法。不同类中的方法、变量等名字互不干涉

                语法:

                        import modulename [as alias] 

                                #as alias:设置模块的别名

                示例:可以一次导入多个模块

import qwdqdqfd_bmi as bmi,tips,diffre
bmi.fun_bmi("张三",1.75,120)  #调用bmi模块的方法

        (2)使用from...import语句导入模块

                通过这种方法导入模块,调用导入的变量、函数等可以把它们的类名前缀省略

                注意:如果导入两个同名的定义,后导入的会覆盖之前导入的定义

                语法:

                        from modename import member 

                                #member:表示要导入类中的函数、变量等,如果需要导入全部可以用*表示

               补充:可以使用dir()函数查看导入的定义

                示例:

from bmi import fun_bmi  #导入模块中的fun_bmi()函数
fun_bmi("李四"1.80,140,)  #直接调用bmi中的函数
print(dir())  #查看已导入的定于

               

5. 指定模块搜索目录

        问题:如果要导入的自定义模块与要执行的文件不在同一个目录时执行代码会报错:找不到此文件

        python中搜索目录是由python的path变量决定的

        查看path变量内容:(需要先导入python的标准模块)                

import sys
print(sys.path)

        如果path变量中不存在需要搜索的目录有三种方式可以设置:

                (1)临时添加

                        只在执行当前文件的窗口当中有效

​import sys
#在path变量中添加临时目录
sys.path.append('D:\\pty\\temp') #因为需要转义所以需要两个反斜杠
sys.path.append('D:/pty/temp')    #或者一个斜杆
print(sys.path)

                (2)增加.pth文件

                        只在当前的python版本中有效,需重新打开python文件

                        找到python的安装目录下的\Python36\Lib\site-packages\NAME.pth     

                                #NAME.pth:对文件名没有要求后缀必须是.pth

                                内容:

                                        E:/pty/temp

                (3)在PYTHONPATH系统环境变量中添加    

                        在此系统中都有效,在path值中会显示在行首部位,需重新打开python文件    

                                找到:计算机→属性→高级系统设置→环境变量→系统变量→新建

                                        变量名:PYTHONPATH

                                        变量值:E:/pty/temp  

Python中的包

        python中的包:必须包含一个名称为__init__.py文件的文件夹,其中__init__.py文件可以是空文件,也可以写一些初始化代码

                在实际项目开发时通常情况下会创建多个包用来存放不同类的文件

        作用:

                模块的作用:避免函数和变量名重名引发的冲突

                包的作用 :

                        避免模块名重名引发的冲突

                        规范代码

python程序的包结构

        以下图shop项目为例,创建了三个包:

创建包:就是创建包含__init__.py文件的文件夹

使用包有三种方法:

        (1)import +完整包名 + 模块名

                示例:调用同级目录中settings包中的模块

import settings.size  #导入settings包中的size模块
print(settings.size.with)#调用size模块中的with变量

        (2)from + 完整包名 + import + 模块名        

                #这个语法导入的模块,在使用模块中的定义时不需要指定包名

                示例:

from settings import size  #导入settings包中的size模块
print(size.with)#调用size模块中的with变量

        (3)from + 完整包名 + . + 模块名 + import + 定义名

                #通过这种方法可以导入指定模块下的某些定义

                示例:

from settings.size import with,height  
    #导入settings包中size模块的with和height两个变量,如果要导入全部定义可以换成*号
print(with)#调用size模块中的with变量

      示例2:

##settings包下的size.py文件
_width = 800        # 定义保护类型的全局变量(宽度)
_height = 600       # 定义保护类型的全局变量(高度)
def change(w,h):
    global _width       # 全局变量(宽度)
    _width = w        # 重新给宽度赋值
    global _height      # 全局变量(高度)
    _height = h       # 重新给高度赋值
def getWidth():     # 获取宽度的函数  
    global _width
    return _width
def getHeight():     # 获取高度的函数  
    global _height
    return _height

if __name__ == '__main__':  # 测试代码
    change(1024,768)       # 调用change()函数
    print("宽度:",getWidth())      # 输出宽度
    print("高度:",getHeight())     # 输出高度


##与settings包同级目录的main.py文件
from settings.size import *   # 导入size模块下的全部定义
if __name__=='__main__':
    change(1024,768)  # 调用change()函数改变尺寸
    print('宽度:',getWidth())      # 输出宽度
    print('高度:',getHeight())     # 输出高度

以主程序的形式执行

问题:在java或C#等大多数开发语言中程序都有一个入口,但python不同他是从脚本的第一行开始执行没有统一的入口,所以调用其他模块的变量时得到的结果可能是整个模块从上到下执行后的结果这显然不是我们想要的

        示例:有出入的运行结果

##diff.py
pinetree = '我是一棵松树'  # 定义一个全局变量(松树)


def fun_christmastree():  # 定义函数
    '''功能:一个梦
       无返回值
    '''
    pinetree = '挂上彩灯、礼物……我变成一棵圣诞树 @^.^@ \n'  # 定义局部变量赋值
    print(pinetree)  # 输出局部变量的值


# *****************************函数体外***********************************#
print('\n下雪了……\n')
print('=============== 开始做梦…… =============\n')
fun_christmastree()  # 调用函数
print('=============== 梦醒了…… ===============\n')
pinetree = '我身上落满雪花,' + pinetree + ' -_- '  # 为全局变量赋值
print(pinetree)  # 输出全局变量的值

##main.py
import ddiff
print("输出变量:",ddiff.pinetree)

 通过__name__判断要以主程序的形式才能执行

       __name__:这是一个记录模块名称的变量,当模块在顶级程序当中运行时他的值就是__main__,如果是其他模块调用它的值就是当前模块的名字 

         示例:

##diff.py
pinetree = '我是一棵松树'  # 定义一个全局变量(松树)


def fun_christmastree():  # 定义函数
    '''功能:一个梦
       无返回值
    '''
    pinetree = '挂上彩灯、礼物……我变成一棵圣诞树 @^.^@ \n'  # 定义局部变量赋值
    print(pinetree)  # 输出局部变量的值


# *****************************函数体外***********************************#
print(__name__)
if __name__ == '__main__':
    print('\n下雪了……\n')
    print('=============== 开始做梦…… =============\n')
    fun_christmastree()  # 调用函数
    print('=============== 梦醒了…… ===============\n')
    pinetree = '我身上落满雪花,' + pinetree + ' -_- '  # 为全局变量赋值
    print(pinetree)  # 输出全局变量的值

##main.py
import ddiff
print("输出变量:",ddiff.pinetree)

                     

引用其他模块

导入和使用标准模块(又称标准库)

        可以通过import直接导入

        python一共提供了二百多个标准库可以从安装目录的doc目录查看帮助文件,在帮助文件的The Python Standard Library节点中查看所有标准库信息

第三方模块的下载与安装

        需要先下载并安装到电脑上就可以像标准库那样调用了,有两种方法

        推荐:在大型项目中需要导入很多模块建议导入顺序:

                标准模块 → 第三方模块 → 自定义模块

        (1)官方推出的第三方库下载地址 进行下载安装

        (2)通过python提供的pip命令进行下载安装:

                需要命令行窗口进行

                语法:

                        pip <command> [modulename]

                                #command:常用命令

                                        install #安装第三方模块

                                        uninstall #卸载第三方模块

                                        list #显示已安装的第三方模块

                                #modulename:当参数为install或uninstall时不可省略

               

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

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

相关文章

前后端分离,就浅浅的看看

目录 前言 一、优点 二、跨域 1、概念 2、解决跨域 三、CORS 总结 前言 前后端分离是Web应⽤的⼀种前后端解耦的架构模式&#xff0c;‘前后端分离‘’&#xff0c;“前”&#xff0c;就是客户端&#xff0c;“后”就是服务器端&#xff0c;专门处理数据和业务逻辑&…

某网站cookie反爬记录

一、背景 最近做城投项目时候遇到一个问题&#xff0c;就是一个代码写好不动&#xff0c;我只操作页面&#xff0c;运行出来的结果却是页面上显示的内容。这就导致了我不能按自己的需求抓取指定模块的内容 二、示例 import requestsheaders {"Accept": "app…

蓝牙智能指纹锁解决方案OM6621PW

目前市面上蓝牙智能指纹锁一般采用MCU指纹传感器蓝牙芯片的方案&#xff0c;该方案采用MCU运行指纹识别算法&#xff0c;采用蓝牙作为数据交互&#xff0c;方案成本较高。 ONMICRO的单芯片蓝牙智能指纹锁解决方案OM6621PW&#xff0c;凭借其卓越的性能和创新的技术&#xff0c;…

Spring的存储与获取Bean

Spring的存储与获取Bean &#x1f50e;Spring—存储Bean配置扫描路径利用类注解进行存储添加注解存储Bean关于Id为什么需要五个类注解类注解之间的关系 利用方法注解进行存储关于Id &#x1f50e;Spring—获取Bean属性注入Set注入构造方法注入总结(Spring的注入方式? 它们之间…

FTL没有映射,跟发工资没有钱有什么区别

大家好&#xff0c;我是五月。 前言 FTL&#xff08;Flash Translation Layer&#xff09;&#xff0c;即闪存转换层&#xff0c;是各种存储设备的核心算法&#xff0c;作用是将Host传下来的逻辑地址转换成物理地址&#xff0c;也就是映射。 地址映射是FTL最原始最基本的功能…

Pytest教程__简介与安装(1)

一、Pytest简介 pytest是python的一种单元测试框架&#xff0c;与python自带的unittest测试框架类似&#xff0c;但更灵活。 官方网站优点简介&#xff1a; 非常容易上手&#xff0c;入门简单&#xff0c;文档丰富&#xff0c;文档中有很多实例可以参考能够支持简单的单元测试…

【Qt】Ubuntu安装GCC9.3.0版本的Qt5.15.5

目录 一、安装GCC9.3.0 1.下载GCC9.3.0源码 2.获取依赖项的包 3.生成Makefile文件 4.编译并安装 5.生成软链接 6. 查看GCC版本 二、安装Qt 1.下载Qt安装包 2.创建Qt项目并运行 一、安装GCC9.3.0 1.下载GCC9.3.0源码 https://ftp.gnu.org/gnu/gcc/gcc-9.3.0/gcc-9.3…

药物靶点信息数据库有哪些?都有哪些特点?

药物靶点信息数据库的应用不仅能够高效地扩大靶点信息获取&#xff0c;而且能深化科研人员对于靶点的认识&#xff0c;从而服务于新靶点发现、药物筛选、药物设计、疾病治疗及药理学机制的研究等领域。 药物靶点可以分为受体、酶、离子通道、DNA、激素与生长因子等几种类型。随…

linux服务器上,docker安装nginx

如果出现 Using default tag: latest Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImagenginx&taglatest": dial unix /va…

不衔接的两个视频能拼在一起吗?怎么把视频拼接起来?

怎么把视频拼接起来&#xff1f;相信大家在平时刷小视频的时候&#xff0c;都看到过视频合集&#xff0c;例如搞笑视频合集、综艺片段合集、变装合集等等。其实这些视频合集都是通过视频拼接来完成的&#xff0c;只需短短几分钟就能通过这些视频获得愉悦体验&#xff0c;非常适…

一学就会-----删除链表中的重复节点

文章目录 题目描述思路一代码示例思路二代码示例 题目描述 在一个排序的链表中&#xff0c;存在重复的结点&#xff0c;请删除该链表中重复的结点&#xff0c;重复的结点不保留&#xff0c;返回链表头指针。 图片示例&#xff1a; 思路一 解决该问题较简单&#xff0c;且在…

光纤跳线性能测试科普

光纤跳线是一种用于连接光纤设备或光纤网络的光学传输线路&#xff0c;它由两个光纤连接器和一段光纤组成。光纤跳线的质量直接影响着光信号的传输效率和稳定性&#xff0c;因此需要进行一些测试来保证其性能。 一、测试类型 光纤跳线性能测试主要有以下四种&#xff1a; 极性…

【基于容器的部署、扩展和管理】3.10 云原生容器运行时环境和配置管理

往期回顾&#xff1a; 第一章&#xff1a;【云原生概念和技术】 第二章&#xff1a;【容器化应用程序设计和开发】 第三章&#xff1a;【3.1 容器编排系统和Kubernetes集群的构建】 第三章&#xff1a;【3.2 基于容器的应用程序部署和升级】 第三章&#xff1a;【3.3 自动…

运维圣经:Webshell应急响应指南

目录 Webshell简介 Webshell检测手段 Webshell应急响应指南 一. Webshell排查 二. 确定入侵时间 三. Web日志分析 四. 漏洞分析 五. 漏洞复现 六. 清除Webshell并修复漏洞 七. Webshell防御方法 Webshell简介 Webshell通常指以JSP、ASP、 PHP等网页脚本文件形式存在…

kubesphere jenkins 构建java项目报错Could not parse metadata

kubesphere jenkins 构建java项目报错Could not parse metadata 问题描述&#xff1a; [ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-install) on project common-plugin-starter: Failed to install metadata com.n…

struct | 详解C语言结构体

结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合&#xff0c;也叫结构。 结构体和其他类型基础数据类型一样&#xff0c;例如 int 类型&#xff0c;char类型&#xff1b;只不过结构体可以做成你想要的数据类型&#xff0c;以方便日后的使用。 在实际项目…

STM32单片机(六)TIM定时器 -> 第二节:TIM定时中断练习(定时器定时中断和定时器外部时钟)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

vivado:引脚已约束但是报错

一、问题引入 报错信息如下&#xff1a; [DRC UCIO-1] Unconstrained Logical Port: 3 out of 3 logical ports have no user assigned specific location constraint (LOC). This may cause I/O contention or incompatibility with the board power or connectivity affect…

msvc编译qt源码(qt6之前版本)

配置环境 根据源码里的readme&#xff08;D:\Qt\Qt5.9.9\5.9.9\Src\readme&#xff09;安装对应的依赖环境&#xff0c;如果是整个源码编译必须都安装 Qt for Windows - Requirements | Qt 5.15 Qt for Windows - Building from Source | Qt 5.15 Qt WebEngine Platform Not…

day02--java基础编程:变量,数据类型,类型转换,运算规则,运算符,分支结构,循环(随机数),方法,重载,可变参数,递归,数组,冒泡排序

1 Day02–变量数据类型类型转换 1.1 前言 1.1.1 标识符 可以简单的理解为一个名字。在Java中&#xff0c;我们需要标识代码的很多元素&#xff0c;包括包名、类名、方法、字段、变量等。我们选择的名称就称为标识符&#xff0c;并且遵循以下规则&#xff1a; A.标识符可以由…