如何在Python中的while(表达式)循环内进行变量赋值?

And*_*son 15 python syntax expression while-loop

我有变量赋值,以便返回指定的值并直接在while循环中将其与空字符串进行比较.

以下是我在PHP中的表现:

while((name = raw_input("Name: ")) != ''):
    names.append(name)
Run Code Online (Sandbox Code Playgroud)

我正在尝试做的与功能相同:

names = []
while(True):
    name = raw_input("Name: ")
    if (name == ''):
        break
    names.append(name)
Run Code Online (Sandbox Code Playgroud)

在Python中有没有办法做到这一点?

nos*_*klo 15

from functools import partial

for name in iter(partial(raw_input, 'Name:'), ''):
    do_something_with(name)
Run Code Online (Sandbox Code Playgroud)

或者如果你想要一个清单:

>>> names = list(iter(partial(raw_input, 'Name: '), ''))
Name: nosklo
Name: Andreas
Name: Aaron
Name: Phil
Name: 
>>> names
['nosklo', 'Andreas', 'Aaron', 'Phil']
Run Code Online (Sandbox Code Playgroud)


Aar*_*lla 13

你可以raw_input()将它包装成一个生成器:

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

names = wrapper('Name:')
Run Code Online (Sandbox Code Playgroud)

这意味着我们回到原点,但代码更复杂.因此,如果您需要包装现有方法,则需要使用nosklo的方法.


Phi*_*lds 9

不,对不起 这是一个FAQ,在这里解释得很好:

PydocsFredrik Lundh的博客中.

不允许在Python表达式中赋值的原因是这些其他语言中常见的,难以发现的错误.

已经提出了许多替代方案.大多数是黑客,可以节省一些打字,但使用任意或隐含的语法或关键词,并且不符合语言变更提案的简单标准:它应该直观地为尚未介绍给构造的人类读者提供正确的含义.

一个有趣的现象是,大多数有经验的Python程序员都认识到这个while True习惯用语并且似乎没有错过表达式构造中的赋值; 只有新人表达了强烈的愿望才能将其添加到语言中.

有另一种拼写方式看起来很有吸引力:

line = f.readline() while line:
    ... # do something with line...
    line = f.readline()
Run Code Online (Sandbox Code Playgroud)