有人问了我一个问题,老实说我以前没有尝试过,所以很有趣的是知道当我们命名一个模块时到底会发生什么
__main__.py
。所以我将一个模块命名为__main__.py
,并将其导入到另一个名为test.py
的文件中。令人惊讶的是,当我尝试运行 test.py
时,它没有打印任何内容,并且 __main__.py
的任何功能在 test.py
中均不可用。以下是这些文件的内容:
以下是
__main__.py
的内容:
def add(a,b):
result = a+b
return result
print(__name__)
if __name__=='__main__':
print(add(1,2))
以下是
test.py
的内容:
import __main__
当我将
__main__.py
重命名为其他名称(例如 func.py
)时,程序可以正确运行并打印模块名称。
当您运行
python test.py
时,test.py
模块本身已经存在于 sys.modules
中,并且带有密钥 "__main__"
。 import __main__
将仅返回此现有缓存命中,因此 __main__.py
上是否存在 sys.path
文件是无关紧要的。
因此,当您执行
import __main__
时,它首先搜索已导入的模块,并在 test.py
中找到 入口点(即
sys.modules['__main__']
),因此它只是返回该结果。