13r*_*s27 2 python recursion circular-dependency python-3.x
我在其中创建了一个以challenge.py以下代码命名的文件:
import challenge
def main():
print('Circular much...')
challenge.main()
Run Code Online (Sandbox Code Playgroud)
由此,我期望 python 由于导入正在运行的文件的循环导入而引发错误,但我发现在 python 3.7 和 3.8 上,该文件运行并打印了Circular much...两次。我会理解一次,因为这意味着文件的其余部分在导入时没有运行,我会理解递归错误,因为它在堆栈中无限地运行了challenge.main(),但我不明白为什么会这样打印两次然后停止?
通过以下方式跟踪:
import challenge
Run Code Online (Sandbox Code Playgroud)
好的,我们将import挑战.py。开始了...
import challenge
Run Code Online (Sandbox Code Playgroud)
我们已经在导入challenge.py,所以我们不会再这样做了。
def main():
print('Circular much...')
Run Code Online (Sandbox Code Playgroud)
main()在命名空间中定义了函数challenge。凉爽的。
challenge.main()
Run Code Online (Sandbox Code Playgroud)
现在调用main()命名空间中的函数challenge。这版画圆了...。这是你的第一张照片。
现在我们又回到了主模块。
def main():
print('Circular much...')
Run Code Online (Sandbox Code Playgroud)
这定义了main()全局命名空间中的函数(永远不会被调用)。
challenge.main()
Run Code Online (Sandbox Code Playgroud)
这会调用main()命名空间中的函数challenge,再次打印Circular much...。
我们已经完成了。您的消息的两个打印件。
这有帮助吗?
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |