python - 为什么不将 if __name__ == '__main__' 放在模块的开头?

标签 python python-3.x

为什么 Python 中的标准是 main()函数和 if __name__ == '__main__'检查代码块的末尾?函数的抽象向上遵循相同的模式似乎也是标准的。我的意思是main()要执行的函数的定义高于 main()以及上面的函数定义等等..

这看起来很奇怪,因为当打开模块阅读代码时,它最终会从低级代码开始,然后向上移动到更高级别的功能。以这种方式理解模块在做什么是不是很难?

为什么不做替代呢?有如果 __name__检查顶部,然后是 main()功能等等。这样一来,main()的内容很快就扫了一眼。函数执行并理解代码的内容。

最佳答案

您不能调用main()在它被定义之前。和 main在定义之前不能调用其他函数。

示例 1:

if __name__=='__main__':
    main()

def main():
    print("Hello")

这会出错,因为 main在您尝试执行它时尚未定义。

示例 2:
def main():
    hello()

if __name__=='__main__':
    main()

def hello():
    print("Hello")

这会出错,因为 main()被执行并尝试调用 hello在它被定义之前。
if __name__=='__main__':其中包含对 main() 的调用最好放在文件的末尾,以便在到达之前定义它需要的所有内容。

您把 main 放在哪里定义本身更灵活,但把它放在最后(就在调用它的 if __name__=='__main__': 块之前)和其他任何地方一样有意义。

关于python - 为什么不将 if __name__ == '__main__' 放在模块的开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60146902/

相关文章:

python - 监听新打开的具有特定标题的窗口

python - Tastypie 在两个外键关系中使用 ToOneFields

python-3.x - 在函数 'cv::cvtColor' 中打开 Cv 错误 : (-215:Assertion failed) ! _src.empty()

python - 如何为星形参数设置默认值?

python - SQL Server 将 b'...' 添加到我存储的 jwt 标记中

python - SVG多边形形状的坐标数组

python - 寻找不等长列表之间的最小可能差异

python-3.x - 在为数据框生成值时在函数中使用条件

Python 3 FancyURLopener cookie 处理

python-3.x - Python请求: UnicodeEncodeError: 'charmap' codec can't encode character