【问题标题】:Difference in Scope Variable in pythonpython中范围变量的差异
【发布时间】:2017-06-20 19:42:39
【问题描述】:
tens=[]
for i in range(10,100,10):
    tens.append(i)

结果 = [10,20,30,40,50,60,70,80,90]

for i in range(10,100,10):
    tens=[]
    tens.append(i)

结果 = [90]

这里的实际代码差异是什么?在这种情况下,范围变量如何相互不同?

【问题讨论】:

  • 你在循环中每次都重新声明十位,因为 range yeilds [10, 20, 30, 40, 50, 60, 70, 80, 90] 你在最后一次迭代中附加了 90
  • 您每次在循环中“清除”列表,方法是在第二个代码 sn-p 中将其值设置为 []。首先,在循环之前初始化一次,然后添加所有值

标签: python loops for-loop scope


【解决方案1】:

在第二个示例中,'tens' 变量在每个循环开始时被重置,因此在最后一个循环中,它被清空并附加 'i' 的最后一个值。

在第一个示例中,变量设置在循环之外,因此不会每次都重置。

【讨论】:

    【解决方案2】:

    在您的第二个示例中,您正在 for 循环中初始化列表,当它以以下形式编写时,您可以很容易地看到:

    for i in range(10,100,10):
     tens=[]
     tens.append(i)
    

    如您所见,您在 for 循环的每一步都清空了列​​表。在您的第一个示例中,您在 for 循环之前创建列表 ,因此它不会被清空。

    【讨论】:

      【解决方案3】:

      首先,我建议更新您的答案并适当地显示代码。我假设这就是你的意思:

      tens=[] 
      for i in range(10,100,10): 
          tens.append(i)
      
      print(tens) # [10,20,30,40,50,60,70,80,90]
      
      for i in range(10,100,10): 
          tens=[] 
          tens.append(i)
      
      print(tens) # [90]
      

      不同之处在于,在第二个循环中,您在每次迭代中都覆盖了变量tens,这导致仅输出最后一条语句:[90]

      【讨论】:

        【解决方案4】:

        第二种情况:

        for i in range(10,100,10):
            tens = []
            tens.append(i)
        

        您正在将一个名为tens 的新变量分配给一个新列表,每个 循环迭代。这意味着您正在创建几个单元素列表,并向它们添加一个值,然后通过将它们替换为新列表来丢弃它们。当您在循环后检查tens 的值时,它只有最后一次迭代,即创建一个列表并将90 附加到它。

        第一种情况:

        tens = []
        for i in range(10, 100, 10)
            tens.append(i)
        

        在这种情况下,您只需在循环之前分配给tens,然后将几个数字附加到列表中。如果您在循环后检查tens 的值,则它具有该范围内的所有值。

        这实际上与范围无关,更多的是因为您将覆盖tens 以成为每次迭代的新列表。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-03-09
          • 1970-01-01
          • 1970-01-01
          • 2011-02-10
          • 2022-01-11
          相关资源
          最近更新 更多