【发布时间】:2021-12-25 03:48:03
【问题描述】:
我对 Python 中的 if __name__ == "__main__": 感到困惑,并在 SO 上遇到了同样的问题:What does if name == "main": do?
感谢Mr Fooz 投票最多、最详细、最有帮助的answer,我的理解有所提高。但是,我仍然对同一答案中的其中一个代码块感到困惑:
foo3.py:
注意:我放了一个快照而不是代码块,因为它有行号。通过这些,我想我可以正确地解释我现在的理解是什么,我的困惑是什么!
据我了解,在运行python3 foo3.py:
- 打印
t1(第14行) - 打印
t2 - 致电
functionA - 打印
a1 - 作为模块调用
foo3(第6行) - 所以,再次打印
t1 - 再次打印“m1”
- 再次致电
functionA - 再次打印
a1 - 再次将
foo3作为模块调用 - ...
- ...
所以,基本上,一个永无止境的t1 ... m1 ... a1 ...:
t1
m1
a1
t1
m1
a1
t1
m1
a1
.
.
.
我期待如此无限的输出,因为foo3.py 中没有__name__ == "__main__" 签入,并且它不断在functionA 中调用自己。
但是,当我运行此代码时,我得到以下有限输出:
t1
m1
a1
t1
m1
a1
a2
b
a3
m2
t2
a2
b
a3
m2
t2
我还是不明白为什么!?不应该有无限输出吗?谁能解释一下上面代码sn-p中的程序顺序?
【问题讨论】:
-
多次导入同一个文件不会重新运行代码。
标签: python recursion main python-module idioms