21. python __init__.py 文件的行为

news2024/9/25 11:22:13

重复打印行为分析

    • 说明
    • 结论
    • 主模块
    • 主模块所在位置不会被python认为是包

说明

在这里插入图片描述
我在调试代码的时候,发现上面的print打印了两次,如果将图片中的
from aaa.F import Cat 改成 from F import Cat 则print只会打印一次。这是为什么呢?

结论

from aaa.bbb.ccc import *
则用 ‘.’ 分割的每个包中的 init.py 都会执行一次,顺序依次为:aaa->bbb->ccc
这个特性十分重要,一不小心容易重复打印。

主模块

直接运行的文件称为 主模块, 主模块中 以及其同级 模块都不能用相对导入否则报错。例子如下

# 案例一:主模块同级模块使用相对导入
TestModule/

    ├── __init__.py    # 这个文件其实未起作用

    ├── main.py    # import brother1; print(__name__)

    ├── brother1.py # from . import brother2; print(__name__) #同级模块使用了相对导入则一定报错

    └── brother2.py # print(__name__)
案例二:主模块使用相对导入
TestModule/

    ├── __init__.py    # 这个文件其实未起作用

    ├── main.py    # from . import brother1; print(__name__)

    ├── brother1.py # import brother2; print(__name__)

    └── brother2.py # print(__name__)

主模块所在位置不会被python认为是包

TestModule/

    ├── main.py 
    |     from Tom import tom; print(__name__) # 这是主模块 
    ├── __init__.py

    ├── Tom
    │   ├── __init__.py # print(__name__)
    │   ├── tom.py from . import tom_brother; rom ..Kate import kate; print(__name__) ## 相对导入父级包,但是运行main.py时候,父级已经不被视为包了,报错

    │   └── tom_brother.py # print(__name__) 

    └── Kate      

         ├── __init__.py # print(__name__)

         └── kate.py # print(__name__)

当运行main.py的时候,则TestModule会自动失去包的概念,则其他模块有 用相对路径 来导入main.py所在路径下的包时会报错。因为main.py所在位置已经不被识别为包了。

https://zhuanlan.zhihu.com/p/416867942

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

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

相关文章

华为海思、燧原、海光等齐力打破封锁,谁主AI芯片江山| 百能云芯

近期,美国对英伟达出口进行了限制,导致英伟达无法向中国大陆销售AI芯片,这一局势催生了中国本土IC设计企业的崛起,包括华为旗下的海思科技、腾讯旗下的燧原科技,以及海光信息和新创公司天数智芯等纷纷抢占市场。 据百能…

微信公众服务号升级订阅号

服务号和订阅号有什么区别?服务号转为订阅号有哪些作用?首先我们要知道服务号和订阅号有什么区别。服务号侧重于对用户进行服务,每月可推送4次,每次最多8篇文章,发送的消息直接显示在好友列表中。订阅号更侧重于信息传…

深度探索Linux操作系统 —— Linux图形原理探讨

系列文章目录 深度探索Linux操作系统 —— 编译过程分析 深度探索Linux操作系统 —— 构建工具链 深度探索Linux操作系统 —— 构建内核 深度探索Linux操作系统 —— 构建initramfs 深度探索Linux操作系统 —— 从内核空间到用户空间 深度探索Linux操作系统 —— 构建根文件系统…

基于SpringBoot+Thymeleaf+Mybatis学生信息管理系统(源码+数据库)

一、项目简介 本项目是一套基于SpringBootThymeleafMybatis学生信息管理系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试…

字符雨canvas

整体思路: 确定好字符雨的具体字符是什么,需要多少行多少列这里是写死的其实也可以用循环加随机的方式生成不一样的字符雨,行列也可以读一下宽度然后做一下出发算一下也行首先得有一张画布搞起,然后循环列数去绘画字符定时器循环…

SQL语句的执行顺序怎么理解?

SQL语句的执行顺序怎么理解? 我们常常会被SQL其书写顺序和执行顺序之间的差异所迷惑。理解这两者的区别,对于编写高效、可靠的SQL代码至关重要。今天,让我们用一些生动的例子和场景来深入探讨SQL的执行顺序。 一、书写顺序 VS 执行顺序 SQ…

数据结构和算法(全)

1.了解数据结构和算法 1.1 二分查找 二分查找(Binary Search)是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两半,然后比较目标值与中间元素的大小关系,从而确定应该在左半部分还是右半部分继续查找。这个…

后台业务管理系统原型模板,Axure后台组件库(整套后台管理页面)

后台业务系统需要产品经理超强的逻辑思维能力和业务理解能力,整理了一批后台原型组件及完整的用 Axure 8 制作的后台系统页面,方便产品经理们快速上手制作后台原型。 包括交互元件、首页、商品、订单、库存、用户、促销、运营、内容、统计、财务、设置、…

步进电机驱动芯片TB6600HG部分翻译

有些参数没看懂。一边设计,一边修正。 目录 1.芯片梗概 2.引脚配置 1)引脚含义 2)内部逻辑 3.功能详解 1)励磁模式设置 2)功能设置 3)初始模式 4)100% 电流设置(电流值) 5)OSC 6)衰减…

【unity】【WebRTC】从0开始创建一个Unity远程媒体流app-构建可同步场景

【背景】 最近在研究远程画面,所以就实践了一下。技术采用我认为比较合适的WebRTC。 这篇文章的基础是我的另一篇博文,如果希望顺利完成本篇操作,请先关注我后查询我的如下博文: 【WebRTC】【Unity】Unity Web RTC1-Unity中简单实现远程画面 上一篇地址: 【WebRTC】【Uni…

【PWN】学习笔记(三)【返回导向编程】(中)

目录 课程回顾动态链接过程 课程 课程链接:https://www.bilibili.com/video/BV1854y1y7Ro/?vd_source7b06bd7a9dd90c45c5c9c44d12e7b4e6 课程附件: https://pan.baidu.com/s/1vRCd4bMkqnqqY1nT2uhSYw 提取码: 5rx6 回顾 管道符 | 把前一个指令的输出作…

一文了解java中volatile关键字

认识volatile volatile关键字的作用有两个:变量修改对其他线程立即可见、禁止指令重排。 第二个作用我们后面再讲,先主要讲一下第一个作用。通俗点来说,就是我在一个线程对一个变量进行了修改,那么其他线程马上就可以知道我修改…

树莓派zero w入坑指南

树莓派zero w入坑指南 入坑契机 说起创客不得不提到开源硬件Raspberry Pi(树莓派)。它是一款基于ARM的微型电脑主板,以MicroSD卡为硬盘,提供HDMI和USB等外部接口,可连接显示器和键鼠。以上部件全部整合在一张仅比信用卡稍大的主板上&#x…

MHA高可用实验(故障模拟+恢复)

实验前准备 MHA manager节点服务器:192.168.188.13 MHA node和manager组件 Master节点服务器:192.168.188.14 mysql5.7、MHA node组件 Slave节点服务器1:192.168.188.15 mysql5.7、MHA node组件 Slave节点服务器2:192.…

uniapp x 相比于其他的开发系统框架怎么样?

首先我们要知道niapp这是一种基于Vue.js开发的跨平台应用框架,可以将同一套代码同时运行在多个平台上,包括iOS、Android、H5等。相比其他开发系统框架,他有什么优点呢?让我们共同探讨一下吧! 图片来源:unia…

python每日学10:关于python实用版本的选择

用python也有好几年了,也会经常安装python,因为有工作需要,可能在各个地方使用python,自己的电脑也经常重装,重装后会装python,还有的时候,装的包太多了,影响整个环境的使用&#xf…

Meta 开启 Ray-Ban人工智能眼镜多模态 AI 功能测试,可识别物体、翻译语言

Meta 公司宣布他们将向部分用户推送其 Meta Ray-Ban 智能眼镜的多模态 AI 功能。这项功能允许 AI 助手通过眼镜的摄像头和麦克风了解佩戴者所看到和听到的事物,并提供相关信息和帮助。 Meta CEO 马克・扎克伯格在 Instagram 上展示了这项功能,他让眼镜推…

【WSL】Windows下的Linux子系统使用方法指南

▒ 目录 ▒ 🛫 导读需求开发环境 1️⃣ WSL安装启用或关闭windows功能安装分发命令行启动Linux 2️⃣ WSL 的基本命令显示帮助列出可用的 Linux 发行版列出已安装的 Linux 发行版检查 WSL 版本更新 WSL通过 PowerShell 或 CMD 运行特定的 Linux 发行版关闭WSL全部服…

Amazon SageMaker:让机器学习变得更简单、更强大

授权说明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道。 前言: 在大数据时代的浪潮中,数据不再只…

期末数组函数加强练习

前言:由于时间问题,部分题解取自网友,但都是做过的好题。 对于有些用c实现的题目,可以转化成c实现,cin看成c的读入,可以用scanf,输出cout看作printf,endl即换行符 开胃菜&#xff…