如何在Python中使用while(i = getNext())模式

时间:2018-12-23 11:05:16

标签: python

在C ++中,我经常使用以下模式:

while (int i = getNextElementPlease()) {
    printf("%d\n", i);
}

但是在python中,我必须重复调用两次:

i = getNextElementPlease()
while (i):
    print(i)
    i = getNextElementPlease()

如何避免重复getNextElementPlease

2 个答案:

答案 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)