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()
我试图理解它,但我似乎无法理解它。
答案 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
属性。