Python学习笔记——认识Python软件包

使用Python编写项目,经常会自定义一些模块文件(函数,类等),组织在不同的文件夹中,在其它Python文件中使用import语句导入使用。Python软件包和普通的文件夹不同之处在于有一个特定文件“__init__.py”。当导入该软件包中的模块时,Python解释器会首先执行该软件包的“__init__.py”文件。

将一个文件夹用作Python软件包时,该文件夹必须满足以下条件:

(1)文件夹中必须包含一个名为“__init__.py”的文件,该文件可以为空,但必须存在。它告诉Python该文件夹是一个可导入的模块或包。

(2)文件夹可以包含其他Python模块、子文件夹和“__init__.py”文件。这些文件和文件夹可以包含Python代码、函数、类等。

(3)软件包可以有自己的“__init__.py”文件,该文件通常用于初始化软件包或在导入软件包时执行某些操作。

“__init__.py ”文件在Python中被用来标识一个目录是一个Python包。其意义是:这个文件在以下几种情况下会被自动执行:

(1)导入包:当你导入一个包的时候,Python会首先执行该包的 “__init__.py” 文件。这使得你可以在 “__init__.py”文件中定义包级别的变量,或者执行一些初始化代码。

(2)包的初始化:当Python解释器启动时,它会查找所有的包,并执行每个包的 “__init__.py”文件。这使得你可以在包的级别上执行一些初始化代码,例如设置环境变量或加载配置文件。

(3)包内直接引用:如果在包的某个模块中需要引用包级别的变量或函数,那么Python会在加载该模块时执行 “__init__.py”文件。

值得注意的是,虽然可以在 “__init__.py” 文件中执行任意Python代码,但是有一些最佳实践和建议:

(1)不要执行非初始化代码:将 “__init__.py” 文件用于包的初始化,避免在其中执行可能会阻止包正常导入的代码。

(2)使用相对导入:如果你需要在 “__init__.py” 文件中导入包内的其他模块,请使用相对导入,以避免可能的循环导入问题。

(3)谨慎使用全局变量:在 “__init__.py” 文件中定义的变量是包级别的,可能会影响到包内的其他模块。因此,应该谨慎使用全局变量。

(4)“__init__.py”文件中的代码仅在导入该软件包时执行一次。如果需要在每次导入该软件包时都执行一些代码,可以在该模块中使用一个启动函数或者钩子,这样当该模块被导入时,该函数或钩子将被调用。

将自定义模块放在一个文件夹中作为软件包的好处是,可以将相关的Python代码组织在一起,方便管理和维护。此外,软件包可以包含多个模块,并且可以通过包管理工具(如pip)进行安装和分发。这对于第三方库和开源项目特别有用,因为它们可以被其他人轻松地安装和使用。

另外:

Python在启动时会执行所有的“__init__.py”文件来初始化包,这是为了设置环境变量或加载配置文件等。但是,当你在代码中导入某个软件包时,该软件包中的“__init__.py”文件会被再次执行。这是因为“__init__.py”文件中的代码是为包的导入而编写的,它定义了包的结构和行为。

例如,“__init__.py”文件可以定义模块的公开接口、设置模块的属性或状态,或者进行其他与模块相关的初始化操作。当模块被导入时,这些初始化操作是必要的,因此“__init__.py`文件会被再次执行。

需要注意的是,“__init__.py”文件中的代码只会在包首次被导入时执行一次。如果在之后的代码中再次导入同一个包,“__init__.py”文件将不会被重新执行。这样可以确保包的初始化操作只执行一次,避免重复执行初始化代码或导致意外的副作用。

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

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

相关文章

vue中的this.$emit方法:用于子组件中触发父组件方法并传值

vue中的this.$emit方法 使用一:$emit使用二:$emit update 和 .sync 修饰符 作用:用于子组件中触发父组件方法并传值 注意: $emit传入的事件名称只能使用小写,不能使用大写的驼峰规则命名。 使用一:$emit …

【正点原子STM32连载】 第五十五章 FreeRTOS移植实验 摘自【正点原子】APM32E103最小系统板使用指南

1)实验平台:正点原子APM32E103最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第五…

用Python制定旅行计划

编写一个Python脚本,用于制定旅行计划。这个脚本将询问关于旅行的基本问题,并根据回答生成一旅行计划。以下是示例脚本: def create_travel_plan(): # 询问用户目的地 destination = input("请输入您的目的地:") # 询问旅行日期 start_date = input("请…

【Kuiperinfer】笔记02 GoogleTest入门

文章目录 Google Test基本概念 编写测试头文件AssertionTESTTest FixtureInvoking the Tests编写main()函数 参考 Google Test Google Test是用于编写C测试的框架,支持多种类型的测试,而不是只有单元测试(unit test)。 编写测试…

weblogic8版本修改控制台密码

weblogic的8.1老版本在控制台界面上没有修改密码的按钮选项,因此需要通过修改服务器配置文件来更新密码。 步骤1: 备份域目录下的DefaultAuthenticatorInit.ldift文件 通过find /域目录 -name weblogic.jar 查到jar包,通过命令生成文件 …

css3的var()函数

css3的var()函数 变量要以两个连字符--(横杆)(减号)为开头 变量可以在:root{}中定义, :root可以在css中创建全局样式变量。通过 :root本身写的样式,相当于 html,但优先级比后者高。 在CSS3中,var()函数是一个用于插入CSS自定义属性&#xff…

Vulhub 靶场训练 DC-6解析

一、搭建环境 kali充当攻击机 ip地址是:192.168.200.14 DC-6充当靶机 : IP地址暂时未知 注意:让两台机器的使用同一种网络适配器 二、信息收集 1、探索同网段存活的主机 ①第一种方法 arp-scan -l②第二种方法 netdiscover -i eth0 -…

Python内置函数67个语法、参数和用法详解

要获取Python解释器中所有当前可用的内置函数和变量的完整列表,您可以在Python解释器中使用dir(__builtins__)命令。这将返回一个包含所有内置函数、异常和其他内置对象的列表。 分为10类 数学运算(7): abs 绝对值divmod 商和余数max 最大min最小pow 指数幂round 取整sum 求…

npm/nodejs安装、切换源

前言 发现自己电脑上没有npm也没有node很震惊,难道我没写过代码么?不扯了,进入正题哈哈…… 安装 一般没有npm的话会报错: 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称而且报这个错,我们执行…

【骑行新纪元】社交风暴来袭,你准备加入骑友圈了吗?

当你的自行车轮轻轻滑过清晨的露水,你是否曾想与志同道合的骑友分享这一刻的喜悦?骑行,这个曾经只是简单运动的代名词,如今正在悄然转变。随着科技的进步和社交平台的发展,骑行不再只是一种健身方式,它还带…

【机器学习】是什么?——讲解

机器学习 机器学习是人工智能(AI)的一个子领域,它提供了系统通过数据学习并改进其性能的能力,而不需要人为进行显式编程,机器学习模型利用大量的数据样本(训练数据)来学习如何识别模式和关系&a…

C-指针-010

1指针 1.1语法: 【基类型*指针变量名】 【int *p&a】1.2语义: 【基类型】:指针变量指向的目标的数据类型 【*】:表示此时定义的变量是一个指针类型的变量 【&a】:一块存放着int类型数据的空间的地址 【*p】…

slot全局属性 <slot>标签</slot> ::slotted()伪元素 笔记240223

slot全局属性 标签 ::slotted()伪元素 MDN HTML全局属性 MDN HTML全局属性 slot MDN HTML <slot>标签元素 MDN CSS ::slotted()为元素 MDN 使用 templates and slots <slot>标签 <slot>标签是的 display 是 contents 在Web开发中&#xff0c;<s…

【高德地图】Android搭建3D高德地图详细教

&#x1f4d6;Android搭建3D高德地图详细教程 &#x1f4d6;第1章 高德地图介绍✅了解高德地图✅2D地图与3D地图 &#x1f4d6;第2章 搭建3D地图并显示✅第 1 步&#xff1a;创建 Android 项目✅第 2 步&#xff1a;获取高德Key✅第 3 步&#xff1a;下载地图SDK✅第 4 步&…

照片上多余的人怎么处理?这几种方法让你的照片更完美!

照片怎么去掉多余人像&#xff1f;这是许多摄影爱好者经常遇到的问题。有时候&#xff0c;我们拍摄了一张非常美好的照片&#xff0c;但由于某些原因&#xff0c;照片中出现了不希望出现的人物。这时候&#xff0c;我们该如何处理呢&#xff1f;下面&#xff0c;我将分享几种常…

2.5网安学习第二阶段第五周回顾(个人学习记录使用)

本周重点 ①多进程和多线程 1、进程和线程 2、多线程爆破 ②Redis数据库 1、Redis的使用 2、Redis持久化 3、Redis未授权免密登录 ③嗅探和Python攻击脚本 1、嗅探&#xff08;端口扫描和IP扫描&#xff09; 2、SCAPY的应用 3、Python攻击脚本&#xff08;SYN半连接…

【More Effective C++】条款22:采用op+=取代op+优势

采用operator实现operator优点&#xff1a; 降低维护成本&#xff0c;只需要维护operator即可&#xff1b;如果operator为publicoperator不需要称为class的友元&#xff1b;通过模板的方式自动实现operator版本&#xff1b;提供两种操作方式&#xff0c;operator效率高&#x…

计算机网络-局域网

文章目录 局域网局域网拓扑结构以太网以太网传输介质以太网时隙提高传统以太网带宽的途径以太网帧格式 局域网协议IEEE 802参考模型IEEE802.2协议LLC帧格式及其控制字段LLC提供的三种服务 IEEE 802.3协议IEEE 802.4协议IEEE 802.5协议 高速局域网100M以太网千兆以太网万兆以太网…

冲突管理最佳实践

任何团队都无法避免冲突&#xff0c;如何有效管理冲突&#xff0c;将冲突转化为团队成长和凝聚的动力&#xff0c;是任何一个团队管理者的必修课。原文: Best Practices for Managing Conflict in Engineering Management Obie Fernandez Unsplash 冲突在任何组织中都不可避免&…

计算机网络中的与或非运算

三种基本逻辑运算关系 搭建中小公司网络&#xff0c;根据网址计算&#xff0c;用户的人数 需要ip和掩码&#xff0c;确定可分配的ip数 与运算电路为串联电路&#xff0c;的&#xff0c;A,B的组合情况 具体参考三种基本逻辑运算关系