有人问了我一个问题,我以前没试过,所以很有意思知道当我们命名为模块__main__.py时到底发生了什么.因此,我将一个模块命名为__main__.py,并将其导入另一个名为test.py的文件中.令人惊讶的是,当我try 运行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)重命名__main__.py时,程序运行正确,打印模块名称的行工作正常.

推荐答案

当你运行python test.py时,test.py模块本身已经存在于sys.modules中,键为"__main__"(参见文档中的top-level code environment).import __main__只返回这个现有的缓存命中,所以sys.path上是否存在__main__.py文件是无关紧要的.

test.py的这些修改将证明这一点:

import sys
print(sys.modules['__main__'])  # it's already in there before the import
import __main__
print(__main__.__file__)  # this should be the abspath of test.py

Python相关问答推荐

在函数内部使用eval(),将函数的输入作为字符串的一部分

如何标记Spacy中不包含特定符号的单词?

运输问题分支定界法&

Stacked bar chart from billrame

Pandas DataFrame中行之间的差异

用砂箱开发Web统计分析

Plotly Dash Creating Interactive Graph下拉列表

如何合并两个列表,并获得每个索引值最高的列表名称?

Python全局变量递归得到不同的结果

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

将标签移动到matplotlib饼图中楔形块的开始处

关于两个表达式的区别

处理Gekko的非最优解

如何将一组组合框重置回无 Select tkinter?

获取PANDA GROUP BY转换中的组的名称

如何训练每一个pandaprame行的线性回归并生成斜率

Django在一个不是ForeignKey的字段上加入'

Stats.ttest_ind:提取df值

使用pythonminidom过滤XML文件

将数据从一个单元格保存到Jupyter笔记本中的下一个单元格