在While循环中分配变量

时间:2015-11-25 18:24:53

标签: python loops while-loop

我在循环目录的脚本中使用While循环,在目录中查找新文件并对添加的文件执行操作;如果没有添加文件,则while循环中断并且脚本结束。但是,我在循环中的变量赋值方面遇到了一些麻烦。我试图让一个变量取值变量2,然后删除第二个变量的内容。但是,当我尝试为变量2获取新变量时,变量1在它到达代码部分之前再次获取这些变量,从而表示while循环中断。

before = []
after = []

while True:
    time.sleep(60)

    for folder in folders:
        files = os.listdir(os.path.join(path, folder))
        for f in files:
            after.append(f)

    added = [f for f in after if f not in before]
    if not added:
        break

    for f in added:
        ## do some action ##

    before = after
    del after[:]
    del added[:]

while循环在第二次迭代期间中断,并且在检查变量时,beforeafter变量是相同的(两者都包含包含在第二次迭代中添加的变量的文件)。由于循环尚未到达before在第二次迭代中获取after内容的部分,为什么它具有这些值?

1 个答案:

答案 0 :(得分:2)

您的before = after行主要导致beforeafter指向相同的基础列表:

In [15]: a = [1,2,3]

In [16]: b = a

In [17]: id(a), id(b)
Out[17]: (4350556208, 4350556208)

In [18]: del a[:]

In [19]: a.append(4)

In [20]: b
Out[20]: [4]

您可以使用copy库或仅使用自己的简短副本来解决此问题:

In [24]: a = [1,2,3]

In [25]: b = [e for e in a]

In [26]: id(a), id(b)
Out[26]: (4349521576, 4349826040)