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

news2025/1/9 1:24:47

 

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

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.coloradmin.cn/o/1709331.html

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

相关文章

前端Vue小兔鲜儿电商项目实战Day01

一、项目介绍 1. 项目技术栈 2. 项目规模 3. 项目亮点 4. 课程安排 5. 适合人群 二、Vue3组合式API体验 1. 通过一个Counter案例体验Vue3新引入的组合式API ①Vue2的代码 <template><button click"addCount"> {{ count }}</button> </templ…

多模态中的模态有哪些

“多模态”这个名字中的“模态”&#xff08;modality&#xff09;&#xff0c;指的是不同的数据类型或信息源。在多模态大模型中&#xff0c;常见的模态包括&#xff1a; 文本模态&#xff1a; 包括自然语言文本、语音识别文本等。 图像模态&#xff1a; 指图像数据&#xff…

苹果CMS:采集到数据但是没有同步到数据库

我们在采集成功之后&#xff0c;发现一个问题&#xff0c;数据库没有数据&#xff0c;为什么会这样呢&#xff1f;是因为我们没有做类别绑定&#xff0c;那我们今天来介绍下如何对采集数据进行类别绑定&#xff1f; 1、进入管理后台【基础】-【分类管理】 进入到该页面我们先…

Linux文本文件管理003

★排序、去重、统计★ 1&#xff09;排序 sort -n按照数值排序 -r降序排列 2&#xff09;去重 uniq 过滤相邻、重复的行 -c 对重复行计数 3&#xff09;统计 wc 统计文件中的字节数、单词数、行数 -l 显示行数 今天通过使用grep、awk、cut指令和上面几个选项提取文本文件…

python爬虫之pandas库——数据清洗

安装pandas库 pip install pandas pandas库操作文件 已知在本地桌面有一名为Python开发岗位的csv文件(如果是excel文件可以做简单修改即可&#xff0c;道理是通用的) 打开文件&#xff1a; 打开文件并查看文件内容 from pandas import DataFrame import pandas as pd data_c…

【PPT密码】PPT文件的两种不可编辑情况

不知道大家有没有遇到过&#xff0c;PPT文件无法编辑的情况&#xff0c;今天小编分享两种ppt文件不可编辑的原因以及解决方法。 情况一 如果打开ppt文件之后&#xff0c;发现幻灯片某些地方或者每张幻灯片同一个地方&#xff0c;无法编辑&#xff0c;这可能是因为PPT中设置了…

第八次javaweb作业

我们小组课程设计的题目是&#xff1a;超市管理系统&#xff0c;我认领的模块是&#xff1a;商品信息管理 controller package com.example.supermarker.controller;import com.example.supermarker.pojo.MerchInfo; import com.example.supermarker.pojo.PageBean; import c…

AcWing 2568:树链剖分 ← 线段树+DFS

【题目来源】https://www.acwing.com/problem/content/2570/【题目描述】 给定一棵树&#xff0c;树中包含 n 个节点&#xff08;编号 1∼n&#xff09;&#xff0c;其中第 i 个节点的权值为 ai。 初始时&#xff0c;1 号节点为树的根节点。 现在要对该树进行 m 次操作&#xf…

yolov10 使用自己的数据集训练目标检测模型

1 环境配置(使用anaconda) conda create -n yolov10 python=3.9 //创建虚拟环境 conda activate yolov10 //激活虚拟环境 pip install -r requirements.txt //执行yolov10 路径下requirements.txt 安装依赖 pip install -e .2.数据集制作 使用lableImage制作数据集(win版…

C# WPF编程基础

XAML文件内容 <Window x:Class"Wpf_demo1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/ble…

【Python】 列表中的删除操作:del、remove 和 pop 的区别

基本原理 在Python中&#xff0c;列表&#xff08;list&#xff09;是一种非常灵活的数据结构&#xff0c;它允许我们存储一系列的元素。在处理列表时&#xff0c;我们经常需要添加、修改或删除元素。在删除元素时&#xff0c;我们可以使用三种不同的方法&#xff1a;del、rem…

SEO之核心关键词(二)

初创企业或者需要建站的朋友看以下两篇文章&#xff0c;谢谢支持&#xff1a; 我给不会敲代码又想搭建网站的人建议新手上云 &#xff08;接上一篇。。。。&#xff09; 4、查询搜索次数 经过自己及朋友、同事的头脑风暴和检查竞争对手网站之后&#xff0c;再到Google 关键词…

跟进2年弄丢1.8亿,你的大客管理错在哪里?

数量并非目的之所在&#xff0c;质量才是根本之道。重视1%的超级用户&#xff0c;才是提高效率的关键所在。 ——凯文凯利 在当今的商业环境中&#xff0c;大客户已成为销售服务型企业最宝贵的资产。他们不仅贡献了企业收入的重要一环&#xff0c;…

韩顺平0基础学Java——第13天

p264-p284 安装IDEA&#xff0c;熟悉一下软件。 尴尬了&#xff0c;难道是这个版本的idea不支持jdk17&#xff0c;难受住了 成功了&#xff0c;顺便跑一下昨天的作业&#xff1a; 这都要跑2秒&#xff1f;是电脑的问题还是谁的问题&#xff1f;控制台里跑的好快的哦 设置id…

vue中在mounted使用$refs获取不到DOM元素

vue中在mounted使用$refs获取不到DOM元素 前言解决方案1、通过使用$nextTick来获取2、updated中获取 前言 在使用ref的时候&#xff0c;在mounted中通过$ref获取节点是获取不到报undefined this.$refs.xx 为 undefined 解决方案 在mounted钩子中加载回来的数据不会在这个阶段更…

淘宝扭蛋机小程序:探索未知,扭出惊喜

在数字时代&#xff0c;我们一直在寻找一种新颖、有趣且充满惊喜的购物方式。淘宝扭蛋机小程序正是为了满足这一需求而诞生的创新之作&#xff0c;它将传统扭蛋机的乐趣与淘宝的丰富商品库完美结合&#xff0c;为您带来前所未有的购物体验。 打破传统&#xff0c;创新玩法 淘…

仅1天录用!3天见刊!这本毕业“水刊”,全科都收,极速上线!

【欧亚科睿学术】 01 期刊简介 【期刊类别】计算机工程类EI 【期刊简介】最新EI期刊目录内源刊 【版面情况】仅10篇版面 【审稿周期】预计2-4周左右录用 【检索情况】EI&Scopus双检 【征稿领域】计算机工程领域相关稿件均可。 02 征稿领域 该期刊发表有关计算机在各…

面试二十六、c++语言级别的多线程编程

一、 多线程编程 ​​​​​ 这里的c语言级别的多线程和linux的有一定的区别&#xff0c;c语言级别提供的多线程比较严格&#xff0c;如果主线程结束了&#xff0c;但是子线程没有结束&#xff0c;进程就会异常终止&#xff0c;而linux不会&#xff0c;会继续执行。 二、模拟卖…

ComfyUI工作流网站

https://openart.ai/home https://comfyworkflows.com/ https://civitai.com/

《java数据结构》--栈的详解

一.栈的认识 栈是一种不同于链表和顺序表的储存数据结构&#xff0c;它对存储数据和取出数据有着特殊的要求&#x1f914;。 首先栈只能从一端存储数据&#xff0c;也就是从一端进&#xff0c;还从这一端出这也是栈最大的特点&#xff0c;这也导致在栈中存取数据都必须遵循先…