问题描述
我需要帮助了解此功能的工作原理:
import turtle
annie = turtle.Turtle()
def draw(t,length,n):
if n == 0:
return
angle = 50
t.fd(length*n)
t.lt(angle)
draw(t,n-1)
t.rt(2*angle)
draw(t,n-1)
t.lt(angle)
t.bk(length*n)
draw(annie,30,4)
turtle.mainloop()
此功能创建一个对称的分支图形,其中有一个大 Y 形分支,两个较小的 Y 形分支悬挂在较大 Y 形分支的每个臂的末端。该函数以“海龟”(当它在屏幕上移动时在其后面留下一条线的小箭头)从它绘制的最后一个较小分支的尖端向后四次结束,并在它从较大分支开始的位置结束分支。那么,如果在该语句之前的 self 调用从 n 的值中减去 1,那么在函数完成时 n = 4 怎么办?第一个 self 调用是否遍历函数的前几行回到那个 self 调用直到 n = 0,然后遍历函数的其余部分?在这种情况下,第二个自调用语句的第一个实例的 n 值是多少? 4? 0?我想我显然误解了一些东西,如果有任何资源可以帮助我了解我在做什么,我将不胜感激。
解决方法
最外层函数结束时 n
仍然是 4 的原因是每个函数都有自己的 n
副本。每个函数都在自己的范围内工作。
最外层函数将 n
的值传递给下一个函数。因此,每个后续函数都会创建自己的副本并从副本中减去 1,从不触及最外层函数作用域中的 n
。
这对列表、对象等的工作方式有所不同。