Python中While循环中的赋值?
我刚刚遇到这段代码
while 1: line = data.readline() if not line: break #...
并认为, 一定有一个更好的方法来做到这一点,而不是使用一个有break
的无限循环。
所以我试了一下:
while line = data.readline(): #...
显然,有一个错误。
有没有办法避免在这种情况下break
?
编辑:
理想情况下,你要避免说两次readline
…恕我直言,重复是甚至更糟糕,特别是如果声明是复杂的。
如果你没有对数据做任何更有趣的事情,比如稍后阅读更多的内容,那么总会有:
for line in data: ... do stuff ...
试试这个,用open('filename')
for line in iter(data.readline, b''):
这并不好,但这是我通常这样做的方式。 Python不像其他语言(例如Java)那样在variables赋值时返回值。
line = data.readline() while line: # ... do stuff ... line = data.readline()
喜欢,
for line in data: # ...
? 它很大程度上取决于data
对象的readline语义的语义。 如果data
是一个file
对象,这将工作。
for line in data: ... process line somehow....
将遍历file
每一行,而不是使用一段while
。 按照我的经验(以Python)阅读文件是一个非常普遍的习惯用法。
事实上, data
不一定是一个文件,而只是提供一个迭代器。
你可以这样做:
line = 1 while line: line = data.readline()
根据Python文档的FAQ ,用迭代的方式遍历inputfor
结构或运行无限循环,并使用break
语句来终止它,这是迭代的首选和惯用的方法。
如果data
有一个返回迭代器而不是readline
(比如说data.iterate
)的函数,你可以简单地做:
for line in data.iterate(): #...
如果data
是一个文件,如其他答案中所述,使用for line in file
行将工作正常。 如果数据不是一个文件,并且是一个随机的数据读取对象,那么你应该将它实现为一个迭代器,实现__iter__
和next
方法。
next
方法应该是阅读,检查是否有更多的数据,如果没有,提出StopIteration
。 如果你这样做,你可以继续for line in data
语言中使用for line in data
。