在C ++中,我经常使用以下模式:
while (int i = getNextElementPlease()) {
printf("%d\n", i);
}
但是在python中,我必须重复调用两次:
i = getNextElementPlease()
while (i):
print(i)
i = getNextElementPlease()
如何避免重复getNextElementPlease
?
答案 0 :(得分:12)
使用经典的while True
/ break
模式:
while True:
i = getNextElementPlease()
if not i:
break
...
或使用two-argument form of iter
从函数中构建迭代器:
for i in iter(getNextElementPlease, sentinel):
...
其中sentinel
是您期望终止循环的任何值。可能类似None
。迭代器将调用getNextElementPlease
获取元素,并在getNextElementPlease
返回前哨值时停止。
答案 1 :(得分:10)
当前,此模式的最不重复的版本(经常被看到)如下:
while True:
i = getNextElementPlease()
if not i:
break
print(i)
展望未来,Python 3.8将通过pep-572引入赋值表达式,这将允许:
while i := getNextElementPlease():
print(i)