我有一個問題,用下面的代碼:獲取用戶輸入並保存到最多三個變量
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)時嘗試的第一件事情之一,因爲它是「明顯」的,像這樣可以工作,但事實並非如此。 –