15

割り当てられた値を返し、それを while ループで直接空の文字列と比較するために、変数の割り当てがあります。

これが私がPHPでやっている方法です:

while((name = raw_input("Name: ")) != ''):
    names.append(name)

私がやろうとしていることは、機能的にはこれと同じです:

names = []
while(True):
    name = raw_input("Name: ")
    if (name == ''):
        break
    names.append(name)

Pythonでこれを行う方法はありますか?

4

6 に答える 6

15
from functools import partial

for name in iter(partial(raw_input, 'Name:'), ''):
    do_something_with(name)

またはリストが必要な場合:

>>> names = list(iter(partial(raw_input, 'Name: '), ''))
Name: nosklo
Name: Andreas
Name: Aaron
Name: Phil
Name: 
>>> names
['nosklo', 'Andreas', 'Aaron', 'Phil']
于 2009-02-13T02:58:59.960 に答える
13

ラップraw_input()してジェネレーターに変えることができます:

def wrapper(s):
    while True:
        result = raw_input(s)
        if result = '': break
        yield result

names = wrapper('Name:')

これは振り出しに戻ることを意味しますが、コードはより複雑になります。したがって、既存のメソッドをラップする必要がある場合は、noskloのアプローチを使用する必要があります。

于 2009-02-12T16:49:06.230 に答える
9

いいえ、申し訳ありません。これは FAQ であり、ここでよく説明されています。

Pydocs 、およびFredrik Lundh のブログ

Python 式で代入を許可しない理由は、他の言語では一般的で見つけにくいバグです。

多くの代替案が提案されています。ほとんどの場合、タイピングをいくらか省くハックですが、恣意的または不可解な構文またはキーワードを使用しており、言語変更提案の単純な基準を満たしていません。つまり、構造にまだ慣れていない人間の読者に適切な意味を直感的に示唆する必要があります。

興味深い現象は、ほとんどの経験豊富な Python プログラマーがwhile Trueイディオムを認識しており、式構造の代入をあまり見逃していないように見えることです。これを言語に追加したいという強い願望を表明するのは、新参者だけです。

魅力的に見える別の綴り方があります:

line = f.readline() while line:
    ... # do something with line...
    line = f.readline()
于 2009-02-12T16:48:34.577 に答える
1
names = []
for name in iter(lambda: raw_input("Name: "), ''):
    names.append(name)
于 2015-04-13T11:45:03.303 に答える