Python学习之路-模块和包

Python学习之路-模块和包

模块

简介

模块是 Python 程序架构的一个核心概念。每一个以扩展名 py 结尾的 Python 源代码文件都是一个模块,模块名同样也是一个标识符,需要符合标识符的命名规则。在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具。模块就好比是工具包,要想使用这个工具包中的工具,就需要先导入这个模块。

导入方式

  • import导入:是一次性把模块中 所有工具全部导入

    import 模块名
    
    • 在导入模块时,每个导入应该独占一行
    • 通过 模块名. 使用模块提供的工具

    {{< admonition tip “提示” true >}}

    开发时 import 代码应该统一写在代码的顶部,更容易及时发现冲突。一旦发现冲突,可以使用 as关键字给其中一个工具起一个别名:import 模块名 as 模块别名

    {{< /admonition >}}

  • from...import导入:如果希望从某一个模块中,导入部分工具,就可以使用 from ... import 的方式。import 模块名

    # 从 模块 导入 某一个工具
    from 模块名1 import 工具名
    

    导入之后不需要通过 模块名.可以直接使用模块提供的工具。

    {{< admonition warning “注意” true >}}

    如果两个模块,存在同名的函数,那么后导入模块的函数,会覆盖掉先导入的函数

    {{< /admonition >}}

  • from…import *(不推荐)

    # 从 模块 导入 所有工具
    from 模块名1 import *
    

    {{< admonition warning “注意” true >}}

    这种方式不推荐使用,因为函数重名并没有任何的提示,出现问题不好排查

    {{< /admonition >}}

模块的搜索顺序

Python 的解释器在导入模块时,会先搜索当前目录指定模块名的文件,如果有就直接导入,如果没有,再搜索系统目录。

{{< admonition note “补充” true >}}

可以通过sys.path给出的列表查看目录里依次查找要导入的模块文件,列表中的路径的先后顺序代表了python解释器在搜索模块时的先后顺序。

可以通过sys.path.append('xxx')的方式添加路径,通过sys.path.insert(0, 'xxx')可以确保先搜索这个路径

想重新导入模块可以reload导入,语法如下

from imp import reload
reload(模块名)

{{< /admonition >}}

{{< admonition warning “注意” true >}}

在开发时,给文件起名,不要和系统的模块文件重名。

{{< /admonition >}}

{{< admonition tip “提示” true >}}

Python 中每一个模块都有一个内置属性 __file__ 可以查看模块的完整路径。

{{< /admonition >}}

__name__ 属性

__name__Python 的一个内置属性,记录着一个字符串。如果是被其他文件导入的,__name__就是模块名。如果 是当前执行的程序__name____main____name__属性可以做到,测试模块的代码只在测试情况下被运行,而在被导入时不会被执行!

{{< admonition note “补充” true >}}

在导入时,模块中所有没有任何缩进的代码都会被执行一遍!在实际开发中通常会在模块下方增加一些测试代码仅在模块内使用,被导入到其他文件中不需要执行。可以在if __name__ == "__main__":下方缩进中编写测试代码,从而不会被执行

{{< /admonition >}}

包是一个包含多个模块的特殊目录,目录下有一个特殊的文件:__init__.py。包名的命名方式和变量名一致。使用 import 包名 可以一次性导入包中所有的模块

发布模块

如果希望自己开发的模块,分享给其他人,可以按照以下步骤操作:

  • 创建 setup.py

    from distutils.core import setupsetup(name="hm_message",  # 包名version="1.0",  # 版本description="itheima's 发送和接收消息模块",  # 描述信息long_description="完整的发送和接收消息模块",  # 完整描述信息author="itheima",  # 作者author_email="itheima@itheima.com",  # 作者邮箱url="www.itheima.com",  # 主页py_modules=["hm_message.send_message","hm_message.receive_message"])
    

    {{< admonition note “补充” true >}}

    有关字典参数的详细信息,可以参阅官方网站

    {{< /admonition >}}

  • 构建模块

    $ python3 setup.py build
    
  • 生成发布压缩包

    $ python3 setup.py sdist
    

    {{< admonition warning “注意” true >}}

    要制作哪个版本的模块,就使用哪个版本的解释器执行!

    {{< /admonition >}}

  • 安装模块

    $ tar -zxvf hm_message-1.0.tar.gz 
    $ sudo python3 setup.py install
    

    {{< admonition note “补充” true >}}

    卸载模块

    直接从安装目录下,把安装模块的 目录 删除就可以

    $ cd /usr/local/lib/python3.5/dist-packages/
    $ sudo rm -r hm_message*
    

    {{< /admonition >}}

安装第三方模块

第三方模块通常是指由知名的第三方团队开发的并且被程序员广泛使用的Python包 / 模块。例如 request 就是一套非常成熟的HTTP 服务模块。pip 是一个现代的,通用的 Python 包管理工具,提供了对 Python 包的查找、下载、安装、卸载等功能。

安装和卸载命令如下:

$ sudo pip3 install requests
$ sudo pip3 uninstall requests

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

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

相关文章

Notepad++编译运行C/C++程序

首先需要先下载一个C语言编译器-MinGW&#xff08;免费的&#xff09; 官网&#xff1a;http://www.mingw.org/&#xff08;加载太慢&#xff09; 我选择MinGW - Minimalist GNU for Windows download | SourceForge.net这个网址下载的 注意安装地址&#xff0c;后续配置环境…

什么是Java泛型?泛型在Java中应用场景

目录 一、什么是Java泛型 二、泛型类 三、泛型接口 四、泛型方法 一、什么是Java泛型 Java泛型是一种在编译时进行类型检查和类型安全的机制。它允许编写能够操作多种类型的代码&#xff0c;而不需要进行类型转换或使用Object类型。通过在定义类、接口或方法时使用泛型参数…

云原生微服务之分布式锁框架 Redisson

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项目…

数据仓库(3)-模型建设

本文从以下9个内容&#xff0c;介绍数据参考模型建设相关内容。 1、OLTP VS OLAP OLTP&#xff1a;全称OnLine Transaction Processing&#xff0c;中文名联机事务处理系统&#xff0c;主要是执行基本日常的事务处理&#xff0c;比如数据库记录的增删查改,例如mysql、oracle…

java大数据hadoop2.92 Java连接操作

1、要想Java可以连接自己虚拟机的hadoop文件系统&#xff0c;需要给文件系统权限 &#xff08;1&#xff09;需要在/usr/local/hadoop/etc/hadoop/core-site.xml core-site.xml文件配置具体ip <configuration><property><name>fs.defaultFS</name>&…

和MATLAB相关的设置断点的快捷键

一个朋友在修改错误的时候&#xff0c;有个操作震惊到我了。 他把迭代次数从1000减小到100&#xff0c;就可以快速仿真完。 废话不多说&#xff0c;直接上快捷键。 F12&#xff1a;设置或者清楚断点。 F5&#xff1a;运行 F10和F11都是步进&#xff0c;但是两者有区别。 …

采样次数与频率的关系

采样次数&#xff08;Sampling Points&#xff09; 在给定时间内记录信号值的次数。 假设在1秒内对一个连续信号采样10次&#xff0c;这意味着每0.1秒记录一次信号值。 假设在1秒内对一个连续信号采样100次&#xff0c;这意味着每0.01秒记录一次信号值。 频率&#xff08;Fre…

统一存储双控NAS同步备份应用方案

随着业务量的增加&#xff0c;企业必须找到一种有效的解决方案保护数据安全&#xff0c;防止不可预测的存储系统故障。传统的数据备份往往是专用的数据格式&#xff0c;不能保留完整的用户目录信息。因此&#xff0c;IT 人员必须在数据恢复后重新配置才可重新恢复业务。为了解决…

序章 初始篇—转生到vue世界!

Vue.js 是什么&#xff1f; Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项…

浅谈MySQL之新增列

一、基本语法 在MySQL中&#xff0c;ALTER命令用于修改数据库表的结构&#xff0c;可以进行多种操作。 要在已有的MySQL表中新增一列&#xff0c;可以使用ALTER TABLE语句。 下面是一个基本的语法示例&#xff1a; ALTER TABLE table_name ADD COLUMN new_column_name data…

linux命令太多记不住吗?怎么办 ?于是推出了这样一套教程。

1.帮助命令 1.1 help命令 #语法格式&#xff1a; 命令 --help #作用: 查看某个命令的帮助信息 # 示例: # ls --help 查看ls命令的帮助信息# netstat --help 查看netstat命令的帮助信息1.2 man命令 #语法格式&#xff1a; man 命令 #作用: 查看某个命令的帮助手册 # 示例: …

递归(Recursion)

一、递归 递归&#xff1a;通过函数体来进行的循环 汇编&#xff1a;它没有所谓的循环嵌套这一说&#xff0c;你之前有一段指令写在什么地方&#xff0c;你不断的跳到之前的指令的地方去执行那条指令&#xff0c;这就是递归。 从前有个山山里有个庙庙里有个和尚讲故事返回1 …

智慧公厕!高科技手段提升城市品质与形象

近年来&#xff0c;随着科技的不断进步&#xff0c;智慧公厕正以其独特的功能和对公共厕所全方位的信息化和数字化&#xff0c;成为智慧城市建设中的重要一环&#xff0c;悄然崭露头角。如广州中期科技有限公司自主研发的智慧公厕管理系统&#xff0c;借助于厕位监测、环境监测…

What is `@RequestMapping` does?

在SpringMVC框架中&#xff0c;RequestMapping 用于映射HTTP请求到控制器类或控制器类中方法。 这个注解可以应用在类级别或方法级别上。 使用样例 包含路径变量和HTTP方法&#xff1a; Controller RequestMapping("/api/v1") public class MyApiController {Get…

【TensorRT】DeviceToHost同步与异步拷贝的区别及带来的问题

cudaMemcpy与cudaMemcpyAsync的区别与问题 cudaMemcpy与cudaMemcpyAsync的区别一、认识stream流二、tensorRT推理的常规流程三、遇到的问题四、引用与参考文献 cudaMemcpy与cudaMemcpyAsync的区别 一、认识stream流 在cuda中&#xff0c;一个stream是由主机代码发布的一系列在…

数据结构期末复习(C语言版)

一、绪论 1.数据结构的术语 数据&#xff1a;所有能输入计算机并被计算机程序处理的符号的总称&#xff1b;数据元素&#xff1a;数据的基本单位&#xff1b;数据项&#xff1a;组成数据元素的、有独立含义的、不可分割的最小单位&#xff1b;数据对象&#xff1a;是性质相同…

免费chartGPT网站汇总

https://s.suolj.com - &#xff08;支持文心、科大讯飞、智谱等国内大语言模型&#xff0c;Midjourney绘画、语音对讲、聊天插件&#xff09;国内可以直连&#xff0c;响应速度很快 很稳定 https://seboai.github.io - 国内可以直连&#xff0c;响应速度很快 很稳定 http://gp…

kotlin的泛型浅析

在Kotlin中&#xff0c;泛型是一种强大的编程概念&#xff0c;它允许你编写更加灵活和可重用的代码&#xff0c;同时提高类型安全性。Kotlin的泛型系统与Java的相似&#xff0c;但有一些更强大的特性。以下是关于Kotlin泛型的一些重要概念和用法&#xff1a; 1. 基本概念&…

数据结构学习 jz44 数字序列中某一位的数字

关键词&#xff1a;找规律 数学 题目&#xff1a;LCR 163. 找到第 k 位数字 虽然做出来了但是做了十万年&#xff0c;我是猪。主要还是找到准确的规律。 思路&#xff1a; //找规律 //0-9 占了10个位置 //10-99 占了90*2个位置 //100-999 占了900*3个位置 //1000-9999 占了90…

优思学院|质量管理五大工具和七大手法要点总结|2024

在现代企业管理中&#xff0c;质量管理是核心竞争力的重要组成部分。它不仅关系到产品的品质&#xff0c;更直接影响到企业的市场信誉和经济效益。本文将深入探讨质量管理中的五大工具及七大手法&#xff0c;这些工具和手法都贯穿了六西格玛DMAIC五步的方法论之中&#xff0c;是…