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