多个模块的Python程序的入口点是什么?

What is the entry point of Python program of multiple modules?

我想了解 Python 程序从哪个点开始 运行。我以前有过 Java 的经验。在 Java 中,每个程序都从 Main class 的 main() 函数开始。知道这一点我可以确定其他 classes 或其他 类 的函数的执行顺序。我知道在 Python 中我可以像这样使用 __name__ 来控制程序执行顺序:

def main():
    print("This is the main routine.")

if __name__ == "__main__":
    main()

但是当我们不使用 __name__ 那么我的 Python 程序的起始行是什么?

Interpreter starts to interpret file line by line from the beginning. If it encounters function definition, it adds it into the globals dict. If it encounters function call, it searches it in globals dict and executes or fail.

# foo.py
def foo():
    print "hello"
foo()

def test()
    print "test"

print "global_string"

if __name__ == "__main__":
    print "executed"
else:
    print "imported"

输出

hello
global_string
executed
  • Interpreter 开始逐行解释 foo.py 就像首先它添加到 globals dict 的函数定义然后它遇到对函数 foo() 的调用并执行它所以它打印hello.
  • 之后,将test()添加到全局dict中,但是没有函数调用这个函数,所以它不会执行这个函数。
  • 执行打印语句后将打印global_string.
  • 之后,如果条件将执行,在这种情况下,它匹配并打印 executed