困惑于变量的必要性

时间:2015-10-09 11:58:04

标签: python variables

obj=lists[0]在以下代码中做了什么?

lists = []
infile = open(path, 'rb')
while True:
    try:
        lists.append(pickle.load(infile))
    except EOFError:
        break
obj=lists[0]
while len(lists) > 3:
    lists.pop(0)
print(lists)
infile.close()

我试图理解它,但我似乎无法理解它。

2 个答案:

答案 0 :(得分:3)

没有

obj在初始分配后从未被引用,因此它对任何事物都没有影响。

我可以看到该行做任何事情的唯一可能方法是lists是一个奇怪的类,其__getitem__调用有副作用。例如,

class StrangeList(list):
    def __getitem__(self, idx):
        self[idx] = 23
        return 23

def a():
    x = StrangeList([1,2,3])
    print x

def b():
    x = StrangeList([1,2,3])
    obj = x[0]
    print x

print "Calling a"
a()
print "Calling b"
b()

结果

Calling a
[1, 2, 3]
Calling b
[23, 2, 3]

在这里,尽管obj = x[0]从未使用过,但obj做了一些事情。但这是一个人为的例子;对于您当前的代码以及将来可能会使用的99.9%的类,__getitem__将不会以这种方式运行。

答案 1 :(得分:1)

假设这是所有代码,那就没有用了,就像@Daniel Roseman提到的那样,它必须是一些重构的遗留。

如果程序中有更多代码,我建议使用变量obj来保留列表的第一个值。它下面的循环使用列表中的所有元素(最后三个除外),因此如果您需要列表中的原始第一个对象,则需要保留它 - 因此,obj属性。