2024-05-03 04:08:34 发布
网友
在下面的代码中obj=lists[0]做什么
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()
我试图理解它,但我似乎看不出任何理由
什么都没有
obj在其初始赋值之后从未被引用,因此它对任何内容都没有影响
obj
唯一可能的方法是,如果lists是一个奇怪的类,它的__getitem__调用有副作用。例如
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__不会这样做
obj = x[0]
假设这就是所有的代码,那么它就没有任何用处了,正如@danielroseman所提到的,它一定是一些重构的遗留问题
如果程序中有更多代码,我建议使用变量obj来保留列表的第一个值。它下面的循环使用列表中的所有元素(除了最后三个),因此如果您需要列表中的第一个原始对象,您需要保留它—因此,obj属性
什么都没有
obj
在其初始赋值之后从未被引用,因此它对任何内容都没有影响唯一可能的方法是,如果
lists
是一个奇怪的类,它的__getitem__
调用有副作用。例如结果
在这里,做
obj = x[0]
确实做了一些事情,尽管obj
从未被使用过。但这是一个人为的例子;对于当前代码和将来可能使用的99.9%的类,__getitem__
不会这样做假设这就是所有的代码,那么它就没有任何用处了,正如@danielroseman所提到的,它一定是一些重构的遗留问题
如果程序中有更多代码,我建议使用变量
obj
来保留列表的第一个值。它下面的循环使用列表中的所有元素(除了最后三个),因此如果您需要列表中的第一个原始对象,您需要保留它—因此,obj
属性相关问题 更多 >
编程相关推荐