我想在while(像c)中写一些简写表达式,但它在python中不起作用。
while token=TokenBuffer.peek() and token != sentinel
doSomeThing()
答案 0 :(得分:7)
你不能用Python做到这一点。赋值是Python中的语句,而不是表达式。
那么,你能做些什么呢?最pythonic可能使用iter
函数:
for token in iter(TokenBuffer.peek, sentinel):
对于新手而言,这方面的文档有点令人困惑:
...如果给出第二个参数 sentinel ,则object必须是可调用对象。在这种情况下创建的迭代器将为每个对
__next__()
方法的调用调用没有参数的对象;如果返回的值等于 sentinel ,则会引发StopIteration
,否则将返回该值。
如果您已经了解迭代器和for循环如何在幕后工作,那就太棒了,但如果您不熟悉,下面的示例可能会更有帮助:
第二种形式
iter()
的一个有用的应用是读取文件的行直到达到某一行。以下示例读取文件,直到readline()
方法返回空字符串:
with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)
这使得它更加清晰:for line in iter(fp.readline, ''):
一遍又一遍地调用fp.readline()
,直到它获得''
。就像你想要一遍又一遍地调用TokenBuffer.peek()
一样,直到它获得sentinel
。