[英]what' the pythonic way to do this?
我想在while(像c)中写一些速记表达式,但是在python中不起作用。
while token=TokenBuffer.peek() and token != sentinel
doSomeThing()
您无法在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()
调用fp.readline()
直到得到''
。 就像您想TokenBuffer.peek()
调用TokenBuffer.peek()
直到它得到一个sentinel
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.