【Python】import 、from...import 以及if __name__ == “__main__“的用法

本文介绍了Python中import、from...import以及if __name__ == __main__的用法。import用于导入整个模块,from...import则能选择性导入模块内的特定内容,直接使用。if __name__ == __main__确保代码仅在直接运行模块时执行,而非被其他模块导入时。通过示例展示了这些语法的实际应用。

1. import

import用于导入模块中的所有内容。

新建hello.py以及import_hello.py 两个文件放在同一目录下,用于观察:

# hello.py
a = 10

print("Hello World")

def hello_python():
    print("Hello Python")
# import_hello.py
import hello # 导入hello.py中的所有内容

hello.hello_python() # 调用hello.py中的hello_python()函数
print(hello.a) # 输出hello.py中的a变量

在这里插入图片描述
在这里插入图片描述

2. from…import

from...import用于导入模块中的部分内容,这部分内容便可直接使用,而不需要通过模块名.变量或者模块名.函数去使用。
新建hello.py以及import_hello.py 两个文件放在同一目录下,用于观察:

# hello.py
a = 10

print("Hello World")

def hello_python():
    print("Hello Python")
# import_hello.py
# 导入hello.py中的变量a 和 hello_python函数
from hello import a, hello_python 

hello_python() # 可直接调用hello_python()
print(a) # 可直接使用变量a

在这里插入图片描述

3. if __name__ == “__main__”

if __name__ == "__main__":中的代码,作为脚本直接执行时会生效,作为模块导入到其他文件时,不会生效。

新建hello.py以及import_hello.py 两个文件放在同一目录下,用于观察:

# hello.py 
# 1.作为脚本直接执行
# 2.作为模块导入到 import_hello.py中 
print("Hello World")

if __name__ == "__main__":
    print("Hello Python")
# import_hello.py 
import hello

1.作为脚本直接执行
在这里插入图片描述
2.作为作为模块导入到其他文件中
在这里插入图片描述

<think>根据提供的引用资料,用户询问的是Python中`if __name__ == '__main__'`的用法。需要系统地解释其作用和使用场景。 首先,分析引用内容: 引用[1]和[2]指出,这段代码用于控制脚本直接运行与导入时执行不同代码。当Python文件作为脚本直接运行时,`__name__`的值为`'__main__'`,因此下面的代码块会执行;当被导入为模块时,该代码块不会执行。 引用[3]详细说明了`__name__`是当前模块的名称,并给出了两个文件相互导入的例子。 引用[4]提供了一个简单示例,展示函数定义和条件执行的区分。 接下来组织回答: 1. 解释`__name__`变量的含义:它是Python的内置属性,代表当前模块的名字。 2. 说明直接运行脚本时`__name__`的值:当文件被直接运行时,`__name__`等于`'__main__'`;当被导入时,`__name__`等于模块名(即文件名去掉.py)。 3. 阐述`if __name__ == '__main__'`的作用:将代码分为两部分,一部分是在导入时执行的(通常是函数定义、类定义等),另一部分是只在直接运行该文件时执行的(通常是测试代码、主程序等)。 4. 给出一个简单的示例代码,展示不同情况下的执行结果。 最后,根据要求生成相关问题。 注意:用户提供的引用内容已经比较全面,因此回答可以综合这些引用,但需要用自己的话表述,避免直接复制。 </think>### Python中`if __name__ == '__main__'`的用法详解 #### 核心机制 1. **运行时模式识别** Python文件有两种执行方式: - 直接运行(作为主程序) - 被导入模块(`import`到其他文件) 内置变量`__name__`会动态标识当前模式: ```python print(__name__) # 直接运行时输出"__main__",被导入时输出模块名 ``` 2. **代码执行控制** `if __name__ == '__main__'`作为条件判断: ```python # 模块通用代码(始终执行) def utility(): print("导入或运行时都执行") # 仅直接运行时执行的代码 if __name__ == '__main__': print("仅直接运行时执行") utility() # 调用函数 ``` #### 核心作用 1. **模块导入保护** 防止模块被导入时执行测试代码或初始化操作。例如模块`utils.py`: ```python # utils.py def calculate(x): return x*2 if __name__ == '__main__': # 其他文件导入时不执行 print(calculate(10)) # 直接测试:python utils.py → 输出20 ``` 2. **分离接口与实现** 保留模块的纯净接口: ```python # 主程序 main.py import utils print(utils.calculate(5)) # 只调用函数,不触发测试代码 ``` 3. **脚本化入口点** 类似其他语言的`main()`函数,提供标准执行入口: ```python if __name__ == '__main__': # 命令行参数处理 # 主业务流程 # 性能测试等 ``` #### 典型应用场景 1. **单元测试隔离** ```python import unittest class TestCases(unittest.TestCase): def test_add(self): self.assertEqual(1+1, 2) if __name__ == '__main__': unittest.main() # 直接运行时启动测试 ``` 2. **多环境适配** ```python if __name__ == '__main__': # 开发环境配置 run_debug_mode() else: # 生产环境配置 load_production_settings() ``` 3. **命令行工具开发** ```python import argparse def parse_args(): parser = argparse.ArgumentParser() parser.add_argument("--input", required=True) return parser.parse_args() if __name__ == '__main__': args = parse_args() process(args.input) # 直接运行时处理命令行输入 ``` > **本质区别**:与C/Java等编译型语言不同,Python没有预编译的`main()`入口,而是通过`__name__`动态判断执行路径[^2][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值