Python脚本中__name__的不同取值及含义是什么?

9 投票
2 回答
2543 浏览
提问于 2025-04-15 12:49

检查一下 __name__ == '__main__' 是一种常见的写法,用来在文件被直接调用时运行一些代码,而不是通过模块调用。

在为Django的manage.py写自定义命令时,我需要使用 code.InteractiveConsole,这让用户体验到一个标准的Python命令行。在我做的一些测试代码中,我发现我想执行的脚本里,__name__ 的值是 __console__,这导致我依赖于 __main__ 的代码没有运行。

我觉得我原来的实现中有些地方需要改动,但这让我开始好奇 __name__ 可能会是什么其他值。我找不到关于可能值的文档,也不知道它们的意思,所以我才来到这里。

2 个回答

6

__name__ 通常是模块的名字,但当这个模块被直接运行而不是被其他模块导入时,它的值会变成 '__main__'

我明白,其他的值只能通过你正在运行的代码直接设置。

9

文档中提到:
可选的locals参数指定了代码执行时使用的字典;默认情况下,它会创建一个新的字典,其中键'__name__'的值是'__console__',而键'__doc__'的值是None
你可以调整locals参数,把__name__设置为__main__,或者修改测试条件。

if __name__ == '__main__'
to  
if __name__ in set(["__main__", "__console__"])

希望这对你有帮助。

撰写回答