Main

即使是一个打算被用作脚本的文件, 也应该是可导入的. 并且简单的导入不应该导致这个脚本的主功能(main functionality)被执行, 这是一种副作用. 主功能应该放在一个main()函数中. 在Python中, pydoc以及单元测试要求模块必须是可导入的. 你的代码应该在执行主程序前总是检查 if name == 'main' , 这样当模块被导入时主程序就不会被执行。

使用 absl 时, 请调用 app.run :

from absl import app
...

def main(argv):
    # 处理非标志 (non-flag) 参数
    ...

if __name__ == '__main__':
    app.run(main)

否则, 使用:

def main():
    ...

if __name__ == '__main__':
    main()

导入模块时会执行该模块的所有顶级代码. 注意顶级代码中不能有 pydoc 不该执行的操作, 比如调用函数, 创建对象等.