10. python从入门到精通——模块

news2024/11/25 4:50:26

目录

模块的概述

自定义模块

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/648243.html

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

相关文章

基于Java实验室耗材管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

如何理解gic控制器中的originating PE Banked和target PE Banked

【问题】 如何理解originating PE Banked和target PE Banked&#xff0c;下面gicv2/gicv3的banked如何理解&#xff1f; 【回答】 GICv2 中&#xff0c;SGI 对于 originating PE&#xff08;即生成中断的处理器&#xff09;和 target PE&#xff08;即接收中断的处理器&#…

【JVM】命令行工具的基本使用--JVM常用指令

文章目录 背景一、Java 性能诊断工具简介二、简单命令行工具2.1、jps2.2、jinfo2.3、jstat2.4、jstack2.5、jmap2.6、jhat 三、图形化综合诊断工具3.1、JVisualvm3.2、JProfiler3.3、JConsole 背景 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题&#xff0c;在用…

few-shot / one shot / zero shot object counting论文汇总

文章目录 2021OBJECT COUNTING: YOU ONLY NEED TO LOOK AT ONE 2022Scale-Prior Deformable Convolution for Exemplar-Guided Class-Agnostic CountingCounTR: Transformer-based Generalised Visual CountingFew-shot Object Counting with Similarity-Aware Feature Enhance…

python+vue企业高校文档管理系统的设计与实现

开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm 在这个推荐个性化的时代&#xff0c;采用新技术开发一个文档系统来分享和展示内容是一个…

编程语言/文件系统/网络协议存在的那些编码

前面的文章介绍了URL编码&#xff0c;UTF8编码&#xff0c;base64&#xff0c;gzip等多种编解码的方式&#xff0c;这里&#xff0c;本节对字符和编码一些杂项进行梳理&#xff0c;相信你会感兴趣。 Python 中的字符和编码 为什么要强调字符编号和字符编码分离这样⼀个概念呢…

A100 GPU服务器安装CUDA教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

02队列及代码实现

队列介绍 队列是一个有序列表&#xff0c;可以用数组或是链表来实现。、遵循先入先出的原则。 &#xff08;先存入队列的数据&#xff0c;要先取出。后存入的要后取出&#xff09; 数组模拟队列 队列本身是有序列表&#xff0c;若使用数组的结构来存储队列的数据&#xff0c;则…

【6月比赛合集】42场可报名的「创新应用」、「数据分析」和「程序设计」大奖赛,任君挑选!

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 创新应用赛&#xff08;39场比赛&#xff09;数据分析赛&…

MySQL—SQL优化详解(上)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

万物的算法日记|第三天

笔者自述&#xff1a; 一直有一个声音也一直能听到身边的大佬经常说&#xff0c;要把算法学习搞好&#xff0c;一定要重视平时的算法学习&#xff0c;虽然每天也在学算法&#xff0c;但是感觉自己一直在假装努力表面功夫骗了自己&#xff0c;没有规划好自己的算法学习和总结&am…

FasterTransformer 001 start up

FasterTransformer Faster Transformer是一个Transformer单层前向计算的高效实现。一个函数由多个OP组合实现。每一个基本OP都会对应一次GPU kernel的调用&#xff0c;和多次显存读写。OP融合可以降低GPU调度和显存读写&#xff0c;进而提升性能。在Faster Transformer&#x…

位姿估计 | 目标体坐标系相对于相机坐标系的位姿估计及其Python代码

目录 引言技术流程1. PNP介绍2. ICP介绍a. 利用ICP求解目标相对相机的位姿b. 利用ICP求解相机帧间运动 Python代码 引言 本文接着分享空间目标位姿跟踪和滤波算法中用到的一些常用内容&#xff0c;希望为后来者减少一些基础性内容的工作时间。以往分享总结见文章&#xff1a;位…

Redis 之Jedis 加springboot整合Redis

Jedis API 文档 在线文档: https://www.mklab.cn/onlineapi/jedis/ Jedis 介绍 Jedis 工作示意图 Java 程序操作Redis 的工具 示意图 Jedis 操作Redis 数据 快速入门 创建maven 项目 注意二步是路径配置自己想放哪里 三步是 定义包的层次结构 嫌弃麻烦的也可以不设置 …

chatgpt赋能python:Python编程技巧:如何横着打印差数列

Python编程技巧&#xff1a;如何横着打印差数列 随着互联网时代的到来&#xff0c;SEO已成为企业推广和营销的重要手段。而作为一名具有10年Python编程经验的工程师&#xff0c;我发现Python编程技巧的学习和应用也可以帮助企业优化SEO排名。本文将从实际项目需求出发&#xf…

如何实现Http请求报头的自动转发之设计

HeaderForwarder组件不仅能够从当前接收请求提取指定的HTTP报头&#xff0c;并自动将其添加到任何一个通过HttpClient发出的请求中&#xff0c;它同时也提供了一种基于Context/ContextScope的编程模式是我们可以很方便地将任何报头添加到指定范围内的所有由HttpClient发出的请求…

基于Java家政服务网站系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

opencv人与摄像头距离、角度检测

参考&#xff1a; https://chtseng.wordpress.com/2018/09/18/%E5%A6%82%E4%BD%95%E4%BC%B0%E7%AE%97%E5%89%8D%E6%96%B9%E4%BA%BA%E7%89%A9%E7%9A%84%E8%B7%9D%E9%9B%A2/ WeChat_20230611160620 1、cv2加载摄像头慢解决方法&#xff0c;单独重新cv2.VideoCapture() https://b…

新《终结者》电影剧本或交由 ChatGPT 书写

据外媒报道&#xff0c;詹姆斯・卡梅隆透露他正在创作下一部《终结者》电影的剧本&#xff0c;他同时表示新剧本的灵感得益于 OpenAI 的 ChatGPT。 打开豆瓣&#xff0c;1984年10月上映的那部「终结者」评分依然在8分以上。而后&#xff0c;终结者系列的电影不断上新&#xff…

基于Java房屋租售网站设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…