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 。