Что лучше: `iter` или` while` для зацикливания? - PullRequest
0 голосов
/ 29 октября 2018

Я знаю два способа непрерывно input до определенного состояния.

Один - это while:

a=input()
while a!='a':
    a=input()

А еще есть iter:

a=input()
for i in iter(lambda: a,'a'):
    a=input()

Как говорит Носкло, лучше:

for i in iter(input,'a'):
    pass

Мне просто интересно, что лучше (предпочтительнее).

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Я не знаю, какой из них будет официально «предпочтительным», но лично я предпочитаю первый, так как я могу его прочитать, и сразу становится ясно, что он делает. Мне кажется, что в целом он более Pythonic. («Явное лучше, чем неявное».)

Единственное, что мне не нравится, это повторение input(). Так что, если бы это был я, я бы написал так:

while True:
    a = input()
    if a=='a':
        break

или это:

finished = False
while not finished:
    a = input()
    if a=='a':
        finished = True

, хотя они менее лаконичны, чем версии на основе iter, их легче читать, особенно если вы не используете iter() регулярно. Они также более гибкие, так как становится легко добавлять другие «специальные» команды ввода, кроме a, если вам в конечном итоге понадобится сделать это в будущем.

0 голосов
/ 29 октября 2018

Ну, если вы собираетесь использовать версию for, по крайней мере, не lambda это до уродства:

for a in iter(input, 'a'):
    ....
...