前言
在我们浏览一下 python 文件或者自己写 python 代码的时候,时常会在代码的最后加上这样的一行代码
if __name__ == '__main__':
func_name()
那么这一行代码有什么具体的作用呢,不加的话会对我们的结果造成影响吗?
__name__
首先对于用双下划线开头且结尾的变量,在 Python 中被称为内置变量,除了 __name__,我们常见的还有 __init__,__dict__ 等等.那么有多少内置变量呢?我们可以通过下面在交互界面输入下面的命令,查看 Python 全部内置变量和内置函数
>>> dir(__builtins__)
结
在Python编程语言中,`__name__`是一个特殊变量,用于标识当前被执行的模块的名称。这个变量在不同的上下文中有不同的值,这使得它成为控制程序执行流程的一个关键工具。本文将深入探讨`__name__`的含义、用法以及在不同情况下的表现。
`__name__`是一个内置变量,它与诸如`__init__`和`__dict__`等其他双下划线开头和结尾的变量一样,有着特殊的用途。`__init__`通常用于类的初始化,而`__dict__`则存储对象的属性。要查看Python的所有内置变量和函数,可以在交互式环境中输入`dir(__builtins__)`。
`__name__`的值主要取决于你是如何运行Python脚本的。在直接执行一个Python文件时,例如`python script.py`,`__name__`的值会被设置为`__main__`,这意味着该脚本是作为主程序执行的。而在其他脚本中导入该模块时,`__name__`的值将是模块的名称,例如`module_name`。
举例说明,假设我们有两个脚本,`test.py`和`test1.py`。在`test.py`中:
```python
# test.py
print(f'__name__ 在 test.py 值为 {__name__}')
```
当我们直接运行`test.py`,`__name__`的值将是`__main__`。而在`test1.py`中导入`test.py`:
```python
# test1.py
import test
```
运行`test1.py`时,`test.py`的`__name__`值将变为`test`,因为它是作为被导入的模块执行的。
`if __name__ == '__main__':`这个结构常被用来区分脚本直接执行和被导入的情况。当`__name__`等于`'__main__'`时,包裹在这条语句中的代码才会被执行,这对于实现模块化代码尤其有用。比如,你可能希望某些代码只在直接运行脚本时执行,而不是在导入时执行。例如:
```python
# test.py
def hello(name):
print(f'Hello, {name}')
if __name__ == '__main__':
hello("Direct Run")
```
在上述例子中,`hello`函数会被定义,但只有当直接运行`test.py`时,`hello("Direct Run")`才会执行。如果`test.py`被其他脚本导入,这段代码不会被执行。
了解`__name__`的用法有助于编写可复用且组织良好的Python代码。它可以防止在导入时意外触发某些操作,如数据加载、测试或交互式行为。同时,它也常用于模块级别的初始化代码,确保这些代码只在模块作为主程序运行时执行,而不是在被其他模块导入时执行。
`__name__`是Python中一个非常重要的内置变量,用于判断脚本是直接执行还是作为模块被导入。正确理解和利用`__name__`可以帮助我们编写更加灵活和模块化的代码,提高程序的可维护性和可重用性。