【问题标题】:Can you nest one for loop inside the other with them having the same loop variable?您可以将一个 for 循环嵌套在另一个循环中,并且它们具有相同的循环变量吗?
【发布时间】:2017-10-16 16:26:06
【问题描述】:

考虑这段代码:

import turtle
import sys

# function that draws a square using turtle graphics:

def drawSquare(t, sz):        # t is a turtle object and sz is the size of the square
    for i in range(4):
        t.forward(sz)
        t.left(90)

def main():
    sys.setExecutionLimit(300000)
    wn = turtle.Screen()      # setting up the window
    wn.bgcolor('lightgreen')

    alex = turtle.Turtle()    # setting up the turtle object
    alex.color('blue')
    alex.speed(10)

    for i in range(24):       # drawing the shape
        drawSquare(alex, 100)
        alex.right(15)

    wn.exitonclick()

main()

在最后一个 for 循环中,我使用 i 作为循环变量。但在 for 循环中,我还调用了 drawSquare() 函数,该函数还包含一个带有名为 i 的循环变量的 for 循环。

当我运行这个程序时,它给出的输出与我将两个循环变量之一的名称更改为 counter 时的输出相同。这只是巧合,还是您可以将一个 for 循环嵌套在另一个循环中,并且它们具有相同的循环变量?

提前致谢。

【问题讨论】:

  • i in drawScope 是它自己的世界(范围)中的不同对象
  • 我认为当你调用一个函数时,这个函数有它自己的命名空间范围。所以这些变量在不同的范围内。

标签: python python-3.x loops for-loop turtle-graphics


【解决方案1】:

如果循环不在同一个范围内,您可以将它们相互嵌套。由于您在另一个函数中调用内部循环,因此它具有不同的范围。第一个 'i' 在这里是不知道的,所以你甚至不能访问它并且没有冲突。

你可以找到更多关于变量和作用域here

【讨论】:

  • 不,即使在相同的范围内,它仍然可以正常工作。如果在同一范围内将循环变量用于其他目的,Python完全没有问题,它不会干扰循环的操作。
  • 你是对的,我错了。我已经编辑了:)
【解决方案2】:

这里有几件事要理解:

drawSquare() 中的变量imain() 中的变量i 是完全独立的变量。它们具有相同的名称,但除此之外,它们彼此完全没有共同之处。你可以在你的程序中拥有一千个名为i 的变量,只要它们对于不同的函数都是本地的,它们不会交互。

第二个更微妙的问题是,如果在单个函数中嵌套两个具有相同控制变量的 for 循环会发生什么。

for i in range(10):
    for i in range(20):
        print(i)

在这种情况下,只有一个 i 变量,但这并不重要。内部循环重新分配用于外部循环的变量的值,但您可以在 Python 中重新分配循环变量,它对循环没有影响。在这里,您将按预期将数字 0..19 打印 10 次。

Python 中的for 循环遍历一个序列(或任何可迭代的对象)。它将依次将循环变量设置为可迭代的每个元素,但循环控制从不使用该变量的当前值,而是在内部保留所有控制信息。这意味着您不能只分配循环变量并期望它像在某些其他语言中那样影响迭代。

【讨论】:

    【解决方案3】:

    两个变量在不同的范围内,所以不会有任何冲突。一个 i 变量在 main 函数的本地范围内,而另一个在 drawSquare 函数的本地范围内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 2015-10-30
      • 2014-03-21
      • 1970-01-01
      • 2022-10-12
      相关资源
      最近更新 更多