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

Bha*_*rag 7 python

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

while (int i = getNextElementPlease()) {
    printf("%d\n", i);
}
Run Code Online (Sandbox Code Playgroud)

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

i = getNextElementPlease()
while (i):
    print(i)
    i = getNextElementPlease()
Run Code Online (Sandbox Code Playgroud)

如何避免重复getNextElementPlease

use*_*ica 12

与经典while True/ break模式:

while True:
    i = getNextElementPlease()
    if not i:
        break
    ...
Run Code Online (Sandbox Code Playgroud)

或者使用双参数形式iter从函数中构建迭代器:

for i in iter(getNextElementPlease, sentinel):
    ...
Run Code Online (Sandbox Code Playgroud)

哪里sentinel是你期望终止循环的任何价值.可能是类似的东西None.迭代器将调用getNextElementPleaseget元素并在getNextElementPlease返回sentinel值时停止.


sch*_*ggl 10

目前,此模式的最少重复版本(并且经常出现)如下:

while True:
    i = getNextElementPlease()
    if not i:
        break
    print(i)
Run Code Online (Sandbox Code Playgroud)

然而,展望未来,Python 3.8将通过pep-572引入赋值表达式,它将允许:

while i := getNextElementPlease():
    print(i)
Run Code Online (Sandbox Code Playgroud)