我有一个问题,用下面的代码:获取用户输入并保存到最多三个变量
cmd, arg, arg1 = input("> ").split(" ")
我想要得到的投入这三个瓦尔。 但是如果我离开arg
和arg1
空,Python的抱怨:
没有足够的数值解压缩(预计3,拿到1)
我怎样才能避免这种情况?
我想使arg
和arg1
可选。
我有一个问题,用下面的代码:获取用户输入并保存到最多三个变量
cmd, arg, arg1 = input("> ").split(" ")
我想要得到的投入这三个瓦尔。 但是如果我离开arg
和arg1
空,Python的抱怨:
没有足够的数值解压缩(预计3,拿到1)
我怎样才能避免这种情况?
我想使arg
和arg1
可选。
如果大小不同,则无法解压变量。好吧,不是这样的。
您可以使用extended iterable unpacking(又称星拆包)(Python的3只):
cmd, *args = input("> ").split(" ")
现在如果你只输入一个命令
,args
是空的,否则它解压您所输入的参数列入清单。
if not args:
# there are no arguments
pass
elif len(args)>2:
print("too many args")
else:
print("args",args)
请注意,你会发现split(" ")
有限。我会做split()
(没有参数:组空白,以避免空参数),或处理与shlex.split(input("> "))
注意:与python 2,你必须拆分和测试长度。较不优雅,但会奏效。
您可以获取输入字符串之后单独设置的变量:
inp=input("> ").split(" ")
l = len(inp)
if l >= 1:
cmd = inp[0]
if l >= 2:
arg1 = inp[1]
if l >= 3:
arg2 = inp[2]
如果你开始这似乎是混乱的,但它是一个很好的答案。 – Chris
谢谢。由于OP知道拆包,这只是前进一步:) –
对于备忘录,上面的答案是引用[PEP 3132:扩展Iterable拆包](https://www.python.org/dev/peps/pep-3132/)。在我看来这很酷。 @克里斯,我不认为它是混乱。这是我开始学习Python(2.7)时尝试的第一件事情之一,因为它是“明显”的,像这样可以工作,但事实并非如此。 –