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的方法.
不,对不起 这是一个FAQ,在这里解释得很好:
不允许在Python表达式中赋值的原因是这些其他语言中常见的,难以发现的错误.
已经提出了许多替代方案.大多数是黑客,可以节省一些打字,但使用任意或隐含的语法或关键词,并且不符合语言变更提案的简单标准:它应该直观地为尚未介绍给构造的人类读者提供正确的含义.
一个有趣的现象是,大多数有经验的Python程序员都认识到这个
while True
习惯用语并且似乎没有错过表达式构造中的赋值; 只有新人表达了强烈的愿望才能将其添加到语言中.有另一种拼写方式看起来很有吸引力:
Run Code Online (Sandbox Code Playgroud)line = f.readline() while line: ... # do something with line... line = f.readline()