【问题标题】:Python variable scope in for loop [duplicate]for循环中的Python变量范围[重复]
【发布时间】:2013-11-24 03:09:26
【问题描述】:

这是一个非常简单的问题,但我不知道为什么 python 会这样做。对于下面的循环,if head != None... 正在创建一个局部变量,这样head += 1 不会修改for head in myHeap.array 中的头部。在 head += 1 之后添加一个 print(head) 会产生我想要的结果,但是 if 语句之外的 head 保持不变。

    for head in myHeap.array:
        if head != None and count % int(grow) == 0:
            head += 1

所以输入 myHeap.array = [2, 2, 2, 1] 在迭代结束时输出相同的列表,此时需要 [3, 3, 3, 2]。我还验证了 if 语句满足条件并且解释器使用 head += 1

【问题讨论】:

    标签: python variables for-loop scope


    【解决方案1】:

    您需要访问 myHeap.array 列表的元素来修改它们。像这样的:

    class myHeap(object):
        pass
    
    myHeap.array = [2, 2, 2, 1]
    
    for n, head in enumerate(myHeap.array):
        if head != None:
            myHeap.array[n] = head + 1
    
    print myHeap.array
    

    输出:

    [3, 3, 3, 2]
    

    【讨论】:

      【解决方案2】:

      运行此程序并仔细查看生成的 ID。

      listt = [2, 3]
      
      for i in listt:
          print(id(i))
          i += 1
          print(id(i))
          print()
      
      print(listt)
      print()
      
      for i in range(len(listt)):
          print(id(listt[i]))
          listt[i] += 1
          print(id(listt[i]))
          print()
      
      print(listt)
      

      您的代码中发生的情况是临时变量中的对象引用已更新,因此它不再包含对列表中对象的引用。因此,您看不到列表中的更改。您需要更新列表元素中的引用。为此,您需要直接访问这些变量,即通过下标。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 2016-11-02
        • 2017-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多