分配条件While循环
在C,一个可以做分配条件While循环
while((i=a) != b) { }
但在Python,它的出现,缺一不可。
while (i = sys.stdin.read(1)) != "\n":
产生
while (i = sys.stdin.read(1)) != "\n":
^
SyntaxError: invalid syntax
(在^
应在=
)
有没有解决办法?
使用break:
while True:
i = sys.stdin.read(1)
if i == "\n":
break
# etc...
谢谢!作品:) – tekknolagi
无限同时循环休息?真?它燃烧... –
@FalconMomot这对我来说似乎是一个完全合理的模式。环路破裂的地方有什么关系?要么终止条件会发生,要么不会。如果'i ==“\ n”'在循环内部没有发生(导致中断),它也不会在while循环的条件参数中发生。 – vastlysuperiorman
个人而言,我喜欢IMM的使用break
标志的答案,但你也可以这样做:
a = None
def set_a(x):
global a
a = x
return a
while set_a(sys.stdin.read(1)) != '\n':
print('yo')
虽然我不会推荐它。
您可以使用内置的功能iter()
使用两个参数调用方法做到这一点:
import functools
for i in iter(fuctools.partial(sys.stdin.read, 1), '\n'):
...
文档本:
iter(o[, sentinel])
...
如果第二个参数,哨点,给出,然后o必须是一个可调用的ob JECT。在这种情况下创建的迭代器将调用或,并且每次调用其next()
方法时都不会有参数;如果返回的值等于哨兵,则会引发StopIteration
,否则返回该值。
iter()
的第二种形式的一个有用的应用是读取文件的行,直到达到某一行。下面的示例读取文件,直到readline()
方法返回一个空字符串:
with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)
一个版本不functools
:
for i in iter(lambda: sys.stdin.read(1), '\n'):
'sys.stdin.readline()' –
哦,那是尴尬.. 。readline()如何与'raw_input()'比较? – tekknolagi
@tekknolagi他可能没有收到您的评论。通过在评论文本中添加'@ name'来ping一个人是个好主意。 – ovgolovin