【发布时间】:2017-04-28 12:29:49
【问题描述】:
首先我必须说,我不是 Python 新手。我对if __name__ == '__main__': 的用途了如指掌。我只是想了解 Python 解释器如何处理这个问题。我编写了两个脚本来测试 Python 中的可能性。请注意,这实际上是非常糟糕的 Python——我不会使用这些东西。我只想了解可能性。
main.py:
import bad.py
def main():
print "Hello, World!"
if __name__ == '__main__':
main()
bad.py:
__name__ = '__main__' # I expected an Error caused by this line
def main():
exit() # I know that this function shouldn't be used
if __name__ == '__main__':
main()
运行main.py 没有输出,我没想到会有输出。
我想知道的:
-
bad.py中的__name__ = '__main__'是否会自动更改main.py中的变量__name__?或者可以存在两个不同'__main__'-modules 吗? - 是否可以仅通过操作
__name__来替换import语句?如果是,你会怎么做? -
当我将
exit()更改为print "Hello",时,输出为"Hello",然后出现错误:Traceback (most recent call last): File "main.py", line 1, in <module> import bad.py ImportError: No module named py有人能解释一下这种行为吗?
- python 版本/操作系统之间有什么区别吗?我在 Linux2 上的 Python 2.7.6 中尝试了这个示例
编辑:
当然import bad.py 不起作用。 import-statements 不需要任何文件结尾。我犯了这个错误是因为我也是用 C 编程的。我把行改为import bad。现在的输出如下所示:
Hello Hello, World
【问题讨论】:
-
看看这个问题,stackoverflow.com/questions/15883526/…。答案就是你想要的。
__name__的变化取决于您在 python 中导入文件的方式。 -
@PrestonHager 对不起,我无法在问题标题中写下 every 点 - 您的链接问题的答案并不能回答我问题的每一点。如果这些点也重复,请留下其他问题的链接
-
好的,如果
__name__变量可用于导入,答案是否定的,它不能。 Python 必须调用__import__()函数。关于系统退出的另一个问题很有趣。 Python 2 和 3 之间的这些函数没有区别,虽然我不知道操作系统。 -
您是否在 python 文档中搜索过对
__name__的引用? -
这是一个相当不错的解释:docs.python.org/3/library/__main__.html
标签: python import python-import importerror