首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Python在导入时会运行我的模块,如何阻止它?

Python在导入模块时会运行模块中的代码,这是因为Python解释器在导入模块时会执行模块中的顶层代码,以便初始化模块的各种变量、函数和类等。

如果你希望在导入模块时不执行其中的代码,可以使用以下方法进行阻止:

  1. 使用if name == 'main'条件判断:在模块中添加如下代码,只有当模块作为主程序运行时才会执行if语句块中的代码,而在被导入时则不会执行。
代码语言:python
复制
if __name__ == '__main__':
    # 主程序代码
  1. 将需要执行的代码放在函数或类中:将需要执行的代码封装在函数或类中,只有在调用该函数或类时才会执行其中的代码,而在导入模块时不会执行。
代码语言:python
复制
def my_function():
    # 需要执行的代码

class MyClass:
    def __init__(self):
        # 需要执行的代码

通过以上两种方法,你可以在导入模块时阻止Python执行其中的代码。这样可以避免在导入模块时产生不必要的副作用或执行耗时的操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么 Mac 运行缓慢以及如何使用CleanMyMac X修复

本文中,我们将解释 MacBook 运行缓慢原因,并为您提供十个神奇修复方法,让您 MacBook 恢复速度。开始吧! 为什么 Mac 运行缓慢? 浏览器对内存要求越来越高。...10 种有保证解决方案,可加快慢速 Mac 运行速度 1.后台运行过多 如果您 Mac 无法再处理简单任务,并且您想找到“为什么 Mac 这么慢?”...如果您在完成上述工作后仍然问为什么 MacBook 这么慢,请确保您 Mac 已安装所有最新更新。 4....同一个应用程序中,优化模块中有针对“挂起应用程序”和“大量内存消费者”控件——使用它们来禁用最大内存占用者。 7. 网速慢 有时,运行缓慢不是您 MacBook,而是您 MacBook。...这就是为什么最好使用CleanMyMac X等工具清除设备上残留物。卸载程序模块显示您有多少应用程序,并方便地将所有剩余应用程序收集一个选项卡中。

2.6K30

导入Python模块执行了所有代码,你不知道__name__变量是什么意思吗?

可能很多同学阅读Python源代码时会发现经常会出现if __name__ == '__main__':这样代码,那么这样代码起到什么作用呢?...像C#、Java这样编程语言并没有这样功能啊!其实这要从Python脚本运行机理谈起。如果Python脚本作为主程序执行,这个执行方式与Java类似。不过当导入一个Python模块就不一样了。...但Python就不一样了,如果使用import语句导入一个模块,其实是先执行被导入模块所有代码,然后才会执行当前模块代码。...脚本,同时即可以作为主程序执行,也可以作为模块导入,这就要求模块导入时不执行作为主程序执行时代码,所以如果是主程序中执行代码,应该使用__main__变量进行判断。...其实是不会,因为Python解析器有缓存,如果一个模块在当前模块中已经被导入了,当第二次导入时,将不会再次执行被导入模块代码,而是直接使用缓存中内容,所以import foo3只会导致foo3.py

1.3K20

python模块与包揭秘

python中,每一个文件就是一个模块,并且模块导入其它模块之后就可以使用导入模块定义变量名。 为什么引入模块呢?...代码重用 系统命名空间划分 实现共享服务和数据 import如何工作 阅读本文之前,想必你一定编写过这样代码: import math print math.sqrt(4) 我们首先导入了math...例如当我自定义了一个文件叫做string.py,然后另一个文件中有import string这么一条语句,目的是导入内建模块string,但是却导入自己写string.py,这是由于python2.7...其实从名字就可以知道它是用作初始化python首次进行包导入时,都会执行相应__init__.py,所以如果你在这个文件中赋值了一些变量,那么导入之后,这些变量会出现在该包命名空间中,...还有一个用比较广泛技巧:每个模块都有一个__name__属性,如果一个文件是作为模块导入那么__name__值就是文件名,如果一个文件是作为主程序运行(也就是不是被导入),那么__

46110

Python绝对导入和相对导入

Python import 搜索路径在当前目录下搜索该模块环境变量 PYTHONPATH 中指定路径列表中依次搜索 Python 安装路径 lib 库中搜索Python import 步骤python...如果是相对导入,一个模块必须有包结构且只能导入顶层模块内部模块。...它还取决于这个文件是如何 load 进来(直接运行 or import)。...所谓包,就是包含 __init__.py 文件目录,该文件导入时会被首先执行,该文件可以为空,也可以在其中加入任意合法 Python 代码。相对导入可以避免硬编码,对于包维护是友好。...要运行包中包含绝对导入和相对导入模块,可以用 python -m A.B.C 告诉解释器模块层次结构。

3.9K21

Python中定义Main函数

多编程语言都有一个特殊函数,当操作系统开始运行程序时会自动执行该函数。这个函数通常被命名为main(),并且依据语言标准具有特定返回类型和参数。...本文结束时,您将了解以下内容: 什么是特殊name变量以及Python如何定义 为什么要在Python中使用main()函数 Python中定义main()函数有哪些约定 main()函数中应该包含哪些代码最佳实践...Python执行模式 Python解释器执行代码有两种方式: 通过命令行方式执行Python脚本。 将代码从一个文件导入另一个文件或者解释器。 更多内容可参考如何运行Python脚本。...导入模块或解释器 接下来是Python解释器执行代码第二种方式:导入开发模块或脚本时,可以使用import关键字导入他人已经构建模块。...导入过程中,Python执行指定模块中定义语句(但仅在第一次导入模块时)。

3.8K30

一文搞懂Python核心概念:导入模块,包

PART 01 前言 Python作为一个解释器,一个程序,如果不导入任何外部模块或包,就做不了什么。理解Python如何导入模块和包将在几乎所有的场景中都很有帮助。...运行这个,查看路径列表: import sys print(sys.path) 这是。...但是它将导入这个包中所有模块导入datetime情况下。...python 2.x Python会颠倒True和False含义,这就是为什么我们命名和导入模块时需要小心原因。...PART 01 检查导入模块 当你导入一个模块时,你如何知道这个模块内部?当然,您可以查看文档,但如果您很懒,不想启动无聊文档怎么办?Python提供了一种方便方式来实现这一点。

1.1K10

python中import星_Python imports 指北

模块 我们从一个常见python代码开始 if __name__ == '__main__': invoke_the_real_code() 很多人,也不例外,把当成固定格式,而不去深入理解。...我们已经知道一点,当从CLI调用你代码而不是导入时,这个代码片段会有所不同。 现在让我们试着去理解我们为什么需要用它。 为了说明,假设我们正在编写一款披萨店软件。 源码Github上。...已经添加了打印__name__变量代码,以便了解__name__是如何变化。...Python模块只是一个包含Python代码文件 就像执行时一样,当模块导入时,顶级语句也会被执行,但是要知道,即使从不同文件中导入几次,它也只会被执行一次。...通过Python标准模块(/usr/lib64/python3.6)路径进行初始化,site-packages是pip放置全局安装所有内容地方,也是一个依赖如何运行模块目录。

1K00

Google Earth Engine(GEE)——客户端python安装与使用

必须为每个新 Python 会话和脚本导入和初始化: import ee 向 Earth Engine 服务器进行身份验证: ee.Authenticate() 您获取身份验证凭据方式可能因您环境而异...下表列出了您在使用 Python API 时会遇到常见语法差异,相对于 JavaScript API。...用户界面对象 Earth Engineui模块只能通过 JavaScript API 代码编辑器使用。 Python 中为 UI 元素使用第三方库。...Colab 笔记本包含运行示例所需一切,但如果您要复制和粘贴代码以您自己环境中运行,则需要先进行一些设置。...您可以运行这些示例之前,您需要将 Folium 导入 Python 会话,并向folium.Map对象添加一个用于处理地球引擎图块方法。

34810

Python内置(2)异常、常量、globals

指的是Python调试模式下运行。默认情况下,Python始终调试模式下运行。...为什么这是一个功能有很长技术原因,涉及元类等高级主题,所以不幸是,不会解释为什么存在。...事实上,所有的Python代码都是被编译,但不是机器代码 ,而是字节码(bytecode)。让通过解释Python如何运行代码来解释这一点。 1. 获取源文件,并解析为语法树。保证语法正确。...本质上是机器上模拟一个非常简单基于堆栈计算机,以便执行您编写Python代码。 3. 然后, Python VM 上运行此代码形式代码。...然后,导入模块__cached__参数指向此.pyc文件。你可以直接在Python代码中运行导入一个.pyc文件,就像运行一个.py文件。

91520

Python 中5种下划线含义都是什么?

但是,前导下划线的确会影响从模块导入名称方式。...假设你一个名为my_module模块中有以下代码: 现在,如果使用通配符从模块导入所有名称,则Python不会导入带有前导下划线名称(除非模块定义了覆盖此行为__all__列表): 顺便说一下...这就是Python解释器所做名称修饰。 这样做是为了防止变量子类中被重写。...2 示例 例如,在下面的循环中,我们不需要访问正在运行索引,我们可以使用“_”来表示只是一个临时值: 你也可以拆分(unpacking)表达式中将单个下划线用作“不关心”变量,以忽略特定值...在下面的代码示例中,将汽车元组拆分为单独变量,但我只对颜色和里程值感兴趣。 但是,为了使拆分表达式成功运行需要将包含在元组中所有值分配给变量。

1.3K40

通过内置对象理解 Python(一)

模块”是任何可以运行导入 Python 文件或包。...运行一个 Python 文件时,文件也是作为一个模块运行,并且模块名是 __main__。...这应该解释了Python文件中使用 if __name__ == '__main__' 是如何起作用。 __doc__ __doc__包含模块文档字符串。...其含义是 Python 调试模式下运行。默认情况下,Python 总是调试模式下运行。 此外,Python 还可以运行在“优化模式”下。要在“优化模式”下运行,可以启动时增加 -O 参数。...Python 是编译。事实上,所有 Python 代码都是编译,但不是编译为机器代码,而是编译为字节码。为了解释这一点,先解释 Python 如何运行代码。

48310

Python imports指南

我们已经知道一点,当从CLI调用你代码而不是导入时,这个代码片段会有所不同。 现在让我们试着去理解我们为什么需要用它。 为了说明,假设我们正在编写一款披萨店软件。 源码Github上。...已经添加了打印__name__变量代码,以便了解__name__是如何变化。...Python模块只是一个包含Python代码文件 就像执行时一样,当模块导入时,顶级语句也会被执行,但是要知道,即使从不同文件中导入几次,它也只会被执行一次。...对此解释原因在于Python模块搜索路径,模块文档中有很详细描述。 模块搜索路径是解释器用于查找模块目录(在运行时可用sys.path得到)列表。...通过Python标准模块(/usr/lib64/python3.6)路径进行初始化,site-packages是pip放置全局安装所有内容地方,也是一个依赖如何运行模块目录。

95750

如何加快Python 应用启动时间

听说pipenv9.0.2已经发布,启动时间有了很大改进。 很快就试了一下,但我觉得并不快。所以我用Python3.7新特性来研究本文中,将介绍该特性以及如何使用它。...显示模块导入时间 Python 3.7有新特性来显示导入模块时间。 这个特性是通过 -X importtime 选项或 PYTHONPROFILEIMPORTTIM 环境变量来启用。...子导入以2个空格缩进。 再看最后一行。507表示运行pipenv模块时只需要507us。579479-507=578972us用于子导入。 找出缓慢部分 我们来从输出中找到缓慢子树。选取了几行。...pipenv导入dotenv, dotenv再导入 dotenv.ipython,导入IPython。 这就是为什么pipenv环境中开始很慢; 已经安装了IPython。...但是为什么导入IPython呢?阅读了dotenv源码,发现它是用于IPython扩展。 当然,pipenv和许多dotenv用户并不使用IPython扩展。

2.1K30

终于把Python中下划线含义弄清楚了(憋了很久了)

阅读本文需要10.5分钟 Python中有关单个和双下划线(“ dunder”)各种含义和命名约定,名称修饰工作方式以及如何影响Python类。...本文中,将讨论以下五个下划线模式和命名约定,以及它们如何影响Python程序行为: · 单引号下划线: _var · 单尾划线: var_ · 双领先下划线: __var · 领先和落后双下划线:..._bar 23 看到_bar中前一个下划线并没有阻止我们“进入”类并访问该变量值。 这是因为Python单个下划线前缀仅仅是一种约定 但是,前导下划线确实会影响名称从模块导入方式。...(): return 42 现在,如果使用通配符导入来从模块导入所有名称,Python将不会导入带有前导下划线名称(除非模块定义了覆盖此行为_all__列表): >>> from my_module...下划线命名模式 这是本文中介绍五个下划线模式Python含义简要概述。

9.9K21

千字14图--Python慎用assert语句阻止代码执行

第1章 基础知识/1 1.1 如何选择Python版本 1.2 Python安装与简单使用 1.3 使用pip管理扩展库 1.4 Python基础知识...非对称密钥密码算法RSA与数字签名算法DSA ======================= 问题描述: 很多人习惯程序中使用assert断言语句来对某些条件进行约束,如果条件不满足就抛出异常,从而强行阻止执行后面的代码...Python程序运行时有个特殊只读属性__debug__,源码解释运行(包括使用import导入模块)时值为True,这时assert语句起作用,确实可以特定条件不满足时阻止执行后面的代码。...但是,把Python程序源码使用优化模式编译为字节码后运行时,__debug__值为False,并且优化编译时会删除所有的assert语句,再也起不到任何约束和拦截作用,直接执行后面代码时抛出异常...综上,Python程序中应慎用assert断言语句来阻止后面代码执行,尤其是计划发布优化编译字节码场合,除非在开发和测试阶段已经考虑到了所有的可能,并且确保可以安全删除assert断言语句而不影响程序执行

74810

django 1.8 官方文档翻译: 6-1-1 Django 设置

Django 设置 Django 设置文件包含你安装Django 所有配置。这页文档解释设置是如何工作以及有哪些设置。 基础 设置文件只是一个Python 模块,带有模块级别的变量。...因为设置文件是一个Python 模块,所以适用以下情况: 不允许出现Python 语法错误。 它可以使用普通Python 语法动态地设置。...DJANGO_SETTINGS_MODULE 值应该使用Python 路径语法,例如mysite.settings。注意,设置模块应该在Python 导入查找路径 中。...Python 代码中使用设置 Django 应用中,可以通过导入django.conf.settings 对象来使用设置。...给设置赋值唯一地方是设置文件中。 安全 因为设置文件包含敏感信息,例如数据库密码,你应该尽一切可能来限制对访问。例如,修改文件权限使得只有你和Web 服务器使用者可以读取

45230

怎样学Python 第二十一课 模块简介

模块对于制作专门代码非常重要,模块是一组已经预先构建以执行特定任务功能或类。 你可能会问,“为什么要把所有东西都分开?”...Python也是如此,为什么要把所有的函数和类放在一个地方? 什么也不做,只是减缓了解释者速度,如果我们将所有代码分成不同组,那么只需选择我们需要并运行代码就会更容易,更快速!...现在我们已经了解了哪些模块,我们可以演示如何使用它们,这里用作实例Pythonos模块。 方法1:导入整个模块 当我们想要使用某个模块时,我们需要导入模块。...我们告诉解释器从这个模块导入这个功能,我们从关键字开始,然后是从中导入模块名称,然后我们列出我们想要导入函数/类。 如果您希望导入多个对象,则必须用逗号分隔它们。...getcwd()函数,我们可以不指定模块情况下调用它了。

75660

Python中下划线5种含义

来源:Python程序员 ID:pythonbuluo 本文介绍了Python中单下划线和双下划线("dunder")各种含义和命名约定,名称修饰(name mangling)工作原理,以及如何影响你自己...本文中,将讨论以下五种下划线模式和命名约定,以及它们如何影响Python程序行为: 单前导下划线:_var 单末尾下划线:var_ 双前导下划线:__var 双前导和末尾下划线:__var__ 单下划线...但是,前导下划线的确会影响从模块导入名称方式。...(): return 42 现在,如果使用通配符从模块导入所有名称,则Python不会导入带有前导下划线名称(除非模块定义了覆盖此行为__all__列表): >>> from my_module...但是,为了使拆分表达式成功运行需要将包含在元组中所有值分配给变量。

1.5K70

Python if __name__ == __main__ 该如何理解

也就是从脚本第一行开始运行,没有统一入口。   一个 Python 源码文件除了可以被直接运行外,还可以作为模块(也就是库)被导入。...不管是导入还是直接运行,最顶层代码都会被运行Python 用缩进来区分代码层次)。而实际上导入时候,有一部分代码我们是不希望被运行。   ...,则代码块被运行,如果模块是被导入,则代码块不被运行。   ...后序   试图使用长篇大论来阐述, Python如何理解 if __name__ == '__main__' 这个问题,不知道有没有描述得足够明白。...Python 并没有太多地方规定要如何如何,很多用法只是惯用法,例如 self 和本文讨论内容。这些用法或是为了让代码看起来更优雅,或是前人经验。

1K40

Python __init__.py 文

编写Python代码(不建议__init__中写python模块,可以包中创建另外模块来写,尽量保证__init__.py简单) __init__.py 文件作用是将文件夹变为一个Python...通常__init__.py 文件为空,但是我们还可以为增加其他功能。我们导入一个包时,实际上是导入__init__.py文件。...其实,__init__.py里面还是可以有内容,我们导入一个包时,实际上导入__init__.py文件。 我们可以再__init__.py文件中再导入其他包,或者模块。 ?...这样,当我们导入这个包时候,__init__.py文件自动运行。帮我们导入了这么多个模块,我们就不需要将所有的import语句写在一个文件里了,也可以减少代码量。...我们有时会使出一招“全部导入”,也就是这样: from PackageName import * 这时 import 就会把注册包 __init__.py 文件中 __all__ 列表中模块和子包导入到当前作用域中来

1.2K30
领券