python - Python 中的 "main"函数

标签 python conventions

前言:
按照惯例,直接运行且未导入的 Python 脚本具有以下行 if __name__ == '__main__': .这是为了防止不应该执行的代码运行。它也可以反过来使用,只允许不直接执行的代码运行,if __name__ != '__main__':题:
在上面提到的传统 if 语句中调用任意命名的“main”函数有什么好处/缺点吗?例如:

def main() -> None:
    print('Done')
    return

if __name__ == '__main__':
    main()
迄今为止的研究/知识:
福利:
  • 更容易、更干净地退出执行
  • 可以用return
  • 不再需要import sys并使用 sys.exit(0)

  • 更轻松地控制变量范围
  • 没有“隐藏”变量名,否则会在“全局”中找到
  • “main”函数中的变量只能在“main”函数中看到(由于作用域)

  • 更容易从另一个脚本调用“main”函数

  • 缺点:
  • 没有必要
  • 它可能看起来更杂乱(涉及更多编码)

  • 进一步的问题:
    还有哪些其他好处和/或缺点?如果代码在函数中而不是不在函数中,它是否会使解释器做更多的工作?

    最佳答案

    这都是关于代码/模块管理的,没有 main哨兵,即使脚本作为模块导入,代码也会被执行。

    关于python - Python 中的 "main"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64905372/

    相关文章:

    python - 使用自定义数据方法自定义 QStandardItemModel

    python - 我可以在模块中使用程序中创建的对象吗?

    c# - 访问参数的属性时使用 ArgumentNullException

    ruby - 如何按条件排除未使用的案例

    python - 查找列组合中的重复项

    python - Keras:当将相同的输入传递给两个函数时,为什么 train_on_batch() 和 test_on_batch() 的损失不同?

    python - 绘制两个变量,然后用第三个变量着色

    configuration - 有没有办法使用 EF 4.2 codefirst 配置用设置的 maxlength 值覆盖 nvarchar(max) ?

    common-lisp - 为什么有些人在循环宏的子句中使用关键字?

    pointers - 我们是否在 Go 中过度使用了传递指针?