繁体   English   中英

pythonic的方法是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM