当我使用C ++语言编程时,经常会使用以下while循环模式。

while ((Data data = GetNewData()) != END) {
  // Do some processing
  ProcessData(data);
}


我们如何在Python中做同样的事情?似乎以下内容无效。

while (data = GetNewData()) != END:
  # Do some processing
  ProcessData(data)


接下来我可以想到的另一种选择是。

while 1:
  data = GetNewData()
  if data == END:
    break
  # Do some processing using data
  ProcessData(data)


但是上面看起来并不整洁。有人可以建议一个好方法吗?

最佳答案

在Python中,赋值是statement, not an expression,这就是为什么

while (data = GetNewData()) != END:
    # Do some processing
    ProcessData(data)


不起作用。 (data = GetNewData())不能用作值。

相反,您可以使用iter

for data in iter(GetNewData, END):
    # Do some processing
    ProcessData(data)


循环将在每次迭代时调用GetNewData(),并将其值分配给data,除非它等于END。尽管此语法绝对不像C ++那样直观,但是它确实消除了用=代替==的错误,反之亦然。

10-07 15:56