揭秘python模块导入的“隐身术”:如何控制模块代码的执行?

 

 新书上架~👇全国包邮奥~

python实用小工具开发教程icon-default.png?t=N7T8http://pythontoolsteach.com/3

 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~

目录

一、引言:两个下划线的奥秘

二、案例展示:模块导入与代码执行

1. 导入模块时的“意外”行为

2. 代码示例:特色模块的问题

3. 解决方案:使用if __name__ == "__main__"

三、实践应用:模块代码的安全执行

四、总结


一、引言:两个下划线的奥秘

    在编程的世界里,有时候我们会遇到一些神秘的代码,比如两个下划线__包围的内容。这些下划线背后的秘密是什么呢?它们对于程序的执行又有着怎样的影响?本文将通过一个实际的代码案例,为大家揭开这层神秘的面纱。

二、案例展示:模块导入与代码执行

1. 导入模块时的“意外”行为

    当我们导入一个模块时,通常期望的是仅仅加载这个模块,而不执行其中的任何代码。然而,在某些情况下,我们会发现导入模块的同时,模块中的一些代码也被执行了。这往往是因为模块中存在一些在顶层定义的变量或函数,它们在模块被导入时会被自动执行。

2. 代码示例:特色模块的问题

    以“特色模块”为例,我们在这个模块中定义了一个变量和一个函数,并在模块被导入时打印了一条消息。然而,这并不是我们想要的行为。我们希望在导入模块时,仅仅加载这个模块,而不执行其中的任何代码。

3. 解决方案:使用if __name__ == "__main__"

    为了解决这个问题,我们可以使用Python中的一个特殊变量__name__。当模块被直接运行时,__name__的值是"__main__";而当模块被导入到其他模块中时,__name__的值是模块自身的名字。因此,我们可以将那些我们不希望在模块被导入时执行的代码放在一个if __name__ == "__main__"的判断语句中。这样,只有当模块被直接运行时,这些代码才会被执行。

三、实践应用:模块代码的安全执行

    通过上面的案例,我们可以看到,使用if __name__ == "__main__"可以帮助我们控制模块中代码的执行。这不仅可以避免不必要的代码执行,还可以提高模块的安全性。在编写模块时,我们应该尽量将那些只应该在模块被直接运行时执行的代码放在这个判断语句中,而将那些应该被其他模块调用的函数、类等定义在顶层。

# 这是一个简单的函数,用于演示模块功能  
def example_function():  print("这是一个示例函数的输出。")  # 这是一个仅在模块作为主程序运行时才执行的代码块  
if __name__ == "__main__":  print("该模块作为主程序运行。")  example_function()  # 调用上面定义的函数  # 此处可以添加更多仅在模块独立运行时需要执行的代码  
else:  print("该模块已被导入到其他模块中。")  

四、总结

    通过本文的介绍和案例展示,我们了解了如何使用if __name__ == "__main__"来控制模块中代码的执行。这不仅可以避免不必要的代码执行,还可以提高模块的安全性。在编写模块时,我们应该注意区分那些应该被其他模块调用的函数、类等定义和那些只应该在模块被直接运行时执行的代码,并合理使用if __name__ == "__main__"来判断和执行它们。

 非常感谢您花时间阅读我的博客,希望这些分享能为您带来启发和帮助。期待您的反馈与交流,让我们共同成长,再次感谢!

👇热门内容👇 

python使用案例与应用_安城安的博客-CSDN博客

软硬件教学_安城安的博客-CSDN博客

Orbslam3&Vinsfusion_安城安的博客-CSDN博客

网络安全_安城安的博客-CSDN博客

教程_安城安的博客-CSDN博客

python办公自动化_安城安的博客-CSDN博客

👇个人网站👇

安城安的云世界

 

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

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

相关文章

win11中文文件名称乱码解决方案

解压后出现以下的乱码 解决方案 步骤1.winR 输入intl.cpl 或 windows 自带的搜索搜“intl.cpl”,打开这个面板控制项 步骤2.在新打开的区域面板中,选择“管理”标签页,点击下方的“更改系统区域设置”按钮 步骤3.取消"Beta版…"选…

4步成功将三方库——speexdsp移植到OpenHarmony

四步实现三方库移植: 1、在Linux下编译要移植的三仓库,分析编译过程; 2、将要移植的三方库加入编译框架中以及产品引用; 3、增量编译出动态链接库和可执行文件推送到开发板上; 4、在开发板上验证移植是否成功、API接口…

greendao实现增删改查

说明:最近碰到一个需求,在安卓上使用greendao框架,实现增删改查数据 效果图: step1: // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript {repositories {go…

Kubernetes——监听机制与调度约束

目录 前言 一、监听机制 1.Pod启动创建过程 2.调度过程 1.指定调度节点 1.1强制匹配 1.2强制约束 二、硬策略和软策略 1.键值运算关系 1.硬策略——requiredDuringSchedulingIgnoredDuringExecution 2.软策略——preferredDuringSchedulingIgnoredDuringExecution …

QTreeWidget 详解

QTreeWidget 详解 QTreeWidget 是 PyQt5 框架中的一个重要部件,它提供了树形结构的视图,可以用于显示层级数据。以下是 QTreeWidget 的详细讲解,包括基本用法、主要方法和属性以及如何与其他组件进行交互。 基本用法 导入模块 要使用 QTree…

基于单片机的自行车里程监测系统的设计

摘 要 :本设计是一种基于单片机的自行车里程监测系统,采用 STC89C52RC 单片机为核心处理芯片,液晶显示器使用 LCD1602 , 速度测量使用霍尔传感器,温度传感器使用 DS18B20 ,时间由时钟芯片 DS1302 进行…

增强创作者能力:The Sandbox 首届 “创作者挑战” 回顾

首届 "创作者挑战" 为创作者在平台上赚取收入提供了难得机会。 我们发起 “创作者挑战” 的目的是支持创作者,赋予他们构建元宇宙的能力。我们提出三大行动号召:发布、参与和赚钱。新推出的「参与奖池」(Engagement Pool&#xff0…

云计算-Amazon S3

亚马逊S3(Amazon S3) 亚马逊S3是一种云对象存储设施。我们将使用的对象将是您在个人计算机上常用的文件。亚马逊S3产品旨在可扩展到实际无限数量的对象和无限大小的对象,但我们在本实验室的练习中只会使用少量对象。当存储许多对象时&#xf…

OpenCV学习 基础图像操作(十四):直方图均衡化和直方图规定化

基础原理 直方图操作是基于像素统计的基础图像操作,被广泛运用于调整图像的对比度,并由此衍生出很多变种和该经的方式. 图像相直方图 直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的…

【强训笔记】day24

NO.1 思路:递归。 代码实现: class Solution { public:bool IsBalanced_Solution(TreeNode* pRoot) {return dfs(pRoot)!-1;}int dfs(TreeNode* root){if(rootnullptr) return 0;int leftdfs(root->left);if(left-1) return -1;int rightdfs(root-…

Vulnhub - AI-WEB-1.0靶机教程

目录 站点信息收集 c段扫描 端口扫描 目录扫描 漏洞利用 使用 burp 抓包 查询数据库名 查询数据库下的表 查询表中的字段名 查询字段中的数据 --os-shell 上传一句话木马 下载地址:https://download.vulnhub.com/aiweb/AI-Web-1.0.7z 我们从站点信息收…

【哈希】闭散列的线性探测和开散列的哈希桶解决哈希冲突(C++两种方法模拟实现哈希表)(1)

🎉博主首页: 有趣的中国人 🎉专栏首页: C进阶 🎉其它专栏: C初阶 | Linux | 初阶数据结构 小伙伴们大家好,本片文章将会讲解 哈希函数与哈希 之 闭散列的线性探测解决哈希冲突 的相关内容。 如…

Echarts圆环图偏移后 中心文字居中对齐实现

像上图中这样圆环图并不在div的中间时,中心的文本需要居中展示 一开始用left百分比但数据一旦变长或变短就会偏移 像这样 实在是太不美观了 所以我们这里使用动态的left通过文本的长度来计算 /*** 计算文本宽度* param {String|Number} text* param {String} font*…

js之图片上传

话不多说&#xff0c;直接上干货&#xff0c;注释在代码里面 下面是效果图和代码 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

[算法][数字][leetcode]2769.找出最大的可达成数字

题目地址 https://leetcode.cn/problems/find-the-maximum-achievable-number/description/ 题目描述 实现代码 class Solution {public int theMaximumAchievableX(int num, int t) {return num2*t;} }

第97天:权限提升-Web 权限权限划分源码后台中间件第三方数据库等

前置知识 具体有哪些权限需要我们了解掌握的 后台权限&#xff0c;网站权限&#xff0c;数据库权限&#xff0c;接口权限&#xff0c;系统权限&#xff0c;域控权限等 以上常见权限获取方法简要归类说明 后台权限&#xff1a;SQL 注入,数据库备份泄露&#xff0c;默认或弱口…

Python | Leetcode Python题解之第104题二叉树的最大深度

题目&#xff1a; 题解&#xff1a; class Solution:def maxDepth(self, root: TreeNode) -> int:if not root: return 0queue, res [root], 0while queue:tmp []for node in queue:if node.left: tmp.append(node.left)if node.right: tmp.append(node.right)queue tmp…

Mybatis入门——其他查询操作和数据库连接池(4)

目录 一、多表查询 二、#{} 和 ${} 1、#{} 和 ${} 的使用 &#xff08;1&#xff09;Integer类型的参数 #{} 的使用 ${} 的使用 &#xff08;2&#xff09;使用String类型的参数 #{} 的使用 ${} 的使用 小结&#xff1a; 2、#{} 和 ${} 的区别 &#xff08;1&#…

太阳能语音监控杆(球机LED款)有什么用

传统监控设备依赖电力支持&#xff0c;在偏远地区和没有网络地区难以发挥其作用&#xff0c;而鼎跃安全的太阳能语音监控杆&#xff08;球机LED款&#xff09;在传统监控基础上&#xff0c;进行了全面优化&#xff0c;解决了无电无网区域使用受限的问题。 太阳能语音监控杆&am…

RSC英国皇家化学学会文献查找下载

英国皇家化学学会(Royal Society of Chemistry&#xff0c;简称RSC)是以促进全球化学领域研究发展与传播为宗旨的国际权威学术机构&#xff0c;是化学信息的一个重要宣传机关和出版商。RSC出版的期刊是化学领域的核心期刊&#xff0c;大部分被SCI和MEDLINE收录&#xff0c;如An…