Python脚本中__name__的不同取值及含义是什么?
检查一下 __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__"])
希望这对你有帮助。