如何区分if __name__ == '__main__'在代码中的作用?

2026-05-28 19:232阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计963个文字,预计阅读时间需要4分钟。

如何区分if __name__ == '__main__'在代码中的作用?

Python初学者在学习代码时经常会看到`if __name__=='__main__':`这样的代码。这行代码的作用是判断当前脚本是直接运行还是被其他脚本导入。

- 如果脚本被直接运行(例如,通过命令行执行),`__name__`变量的值将被设置为`'__main__'`。- 如果脚本作为模块被导入到另一个脚本中,`__name__`的值将是脚本的名称。

因此,`if __name__=='__main__':`这行代码确保了只有当脚本被直接运行时,其内部的代码块才会被执行。这样做的好处是:

- 避免重复执行代码:当脚本作为模块导入时,内部的代码块可能已经执行过,再次执行会导致重复执行。- 提高代码的可读性和维护性:将需要直接运行的代码块放在这个判断中,可以让代码的结构更清晰,易于理解和维护。

例如,以下是一个简单的Python脚本,其中包含了`if __name__=='__main__':`的用法:

pythondef print_greeting(name): print(fHello, {name}!)

if __name__=='__main__': print_greeting(world)

在这个例子中,当直接运行脚本时,会输出Hello, world!。如果将这个脚本导入到另一个脚本中,由于`__name__`不是`'__main__'`,所以`print_greeting(world)`不会被执行。

Python初学者在学习代码时常常会看到​​if __name__== '__main__':​​ 这样的代码,这个是什么意思呢?

Python中有很多内置变量和内置方法(也称魔术变量/魔术方法),为了避免和用户的变量冲突,内置变量和内置方法通常以两个下划线开头和结尾。

常见的内置变量有:

  • ​​__file__​​:表示当前文件(路径)
  • ​​__package__​​:当前文件所在包名
  • ​​__name__​​:当前模块名
  • ​​__cached__​​: 当前缓存路径
  • ​​__buildins__​​: 当前可用所有内置方法(字典)


注意这些都是正常的变量,使用时不加引号。


内置(魔术)方法就更多,如​​__init__​​​、​​__str__​​​、​​__get_attr__​​等等。

所以,​​if __name__ == '__main__':​​是判断当前模块名是不是字符串​​'__main__'​​。

我们知道Python中每个文件(模块)都可以导入其他模块。

如何区分if __name__ == '__main__'在代码中的作用?

当前运行的文件(模块)被称为主模块,此时其模块名​​__name__​​为字符串​​'__main__'​​。

而其他导入的模块的模块名​​__name__​​则为导入的模块名(导入路径+文件名去掉.py)。

例如, 有两个文件a.py和b.py,a中导入b模块执行,代码如下:

b.py代码

print('我是b模块,我的模块名为', __name__)

if __name__ == '__main__':
print('只有我自己运行时才会打印,别人导入我时不会打印')

a.py代码

import b
print('我是a模块,我的模块名为', __name__)

运行a.py后打印结果为:

我是b模块,我的模块名为 b
我是a模块,我的模块名为 __main__

这里我们可以看到a模块是主模块,及运行的是a.py文件。b.py中​​if __name__=='__main__':​​中的代码没有打印。

如果我们运行b.py,则会打印​​if __name__=='__main__':​​中的代码,运行结果如下:

我是b模块,我的模块名为 __main__
只有我自己运行时才会打印,别人导入我时不会打印

因此 ​​if __name__ == '__main__':​​可以用来判断是从当前文件运行的,如果是当前模块才执行if里面的代码。

也称为模块私有代码, 常用作测试当前模块使用,并且不影响别的模块导入使用。




本文共计963个文字,预计阅读时间需要4分钟。

如何区分if __name__ == '__main__'在代码中的作用?

Python初学者在学习代码时经常会看到`if __name__=='__main__':`这样的代码。这行代码的作用是判断当前脚本是直接运行还是被其他脚本导入。

- 如果脚本被直接运行(例如,通过命令行执行),`__name__`变量的值将被设置为`'__main__'`。- 如果脚本作为模块被导入到另一个脚本中,`__name__`的值将是脚本的名称。

因此,`if __name__=='__main__':`这行代码确保了只有当脚本被直接运行时,其内部的代码块才会被执行。这样做的好处是:

- 避免重复执行代码:当脚本作为模块导入时,内部的代码块可能已经执行过,再次执行会导致重复执行。- 提高代码的可读性和维护性:将需要直接运行的代码块放在这个判断中,可以让代码的结构更清晰,易于理解和维护。

例如,以下是一个简单的Python脚本,其中包含了`if __name__=='__main__':`的用法:

pythondef print_greeting(name): print(fHello, {name}!)

if __name__=='__main__': print_greeting(world)

在这个例子中,当直接运行脚本时,会输出Hello, world!。如果将这个脚本导入到另一个脚本中,由于`__name__`不是`'__main__'`,所以`print_greeting(world)`不会被执行。

Python初学者在学习代码时常常会看到​​if __name__== '__main__':​​ 这样的代码,这个是什么意思呢?

Python中有很多内置变量和内置方法(也称魔术变量/魔术方法),为了避免和用户的变量冲突,内置变量和内置方法通常以两个下划线开头和结尾。

常见的内置变量有:

  • ​​__file__​​:表示当前文件(路径)
  • ​​__package__​​:当前文件所在包名
  • ​​__name__​​:当前模块名
  • ​​__cached__​​: 当前缓存路径
  • ​​__buildins__​​: 当前可用所有内置方法(字典)


注意这些都是正常的变量,使用时不加引号。


内置(魔术)方法就更多,如​​__init__​​​、​​__str__​​​、​​__get_attr__​​等等。

所以,​​if __name__ == '__main__':​​是判断当前模块名是不是字符串​​'__main__'​​。

我们知道Python中每个文件(模块)都可以导入其他模块。

如何区分if __name__ == '__main__'在代码中的作用?

当前运行的文件(模块)被称为主模块,此时其模块名​​__name__​​为字符串​​'__main__'​​。

而其他导入的模块的模块名​​__name__​​则为导入的模块名(导入路径+文件名去掉.py)。

例如, 有两个文件a.py和b.py,a中导入b模块执行,代码如下:

b.py代码

print('我是b模块,我的模块名为', __name__)

if __name__ == '__main__':
print('只有我自己运行时才会打印,别人导入我时不会打印')

a.py代码

import b
print('我是a模块,我的模块名为', __name__)

运行a.py后打印结果为:

我是b模块,我的模块名为 b
我是a模块,我的模块名为 __main__

这里我们可以看到a模块是主模块,及运行的是a.py文件。b.py中​​if __name__=='__main__':​​中的代码没有打印。

如果我们运行b.py,则会打印​​if __name__=='__main__':​​中的代码,运行结果如下:

我是b模块,我的模块名为 __main__
只有我自己运行时才会打印,别人导入我时不会打印

因此 ​​if __name__ == '__main__':​​可以用来判断是从当前文件运行的,如果是当前模块才执行if里面的代码。

也称为模块私有代码, 常用作测试当前模块使用,并且不影响别的模块导入使用。