簡體   English   中英

為什么argv無法與我的功能一起使用?

[英]Why does argv not work with my function?

所以這是我的代碼

from sys import argv

a,b = argv

def gcd(a,b):
    while a:
        a,b = b%a, a
    print b

現在,如果我從命令行運行它

python euclidian_algorithm.py 40, 48

我得到這個錯誤

Traceback (most recent call last):
File "euclidian_algorithm.py", line 3, in <module>
a,b = argv
ValueError: too many values to unpack

但是,如果我然后刪除兩個輸入之間的空間,就像這樣

python euclidian_algorithm.py 40,48

然后,我根本沒有任何輸出。

現在,首先,當我僅放置兩個參數時,我不理解要解壓縮的值太多了。 其次,為什么在第二種情況下我沒有輸出?

引用sys.argv文檔,

傳遞給Python腳本的命令行參數列表。 argv[0]是腳本名稱(是否為完整路徑名取決於操作系統)。

因此, argv的第一個值將是當前腳本名稱。 在第一種情況下,您嘗試將三個值分解為兩個變量。 這就是為什么它失敗了。

在第二種情況下,您要將當前腳本名稱分配給a ,將48,40分配給b

您可以像這樣打印argvab來確認

➜  Desktop  cat Test.py
from sys import argv

print argv
a, b = argv
print a, b


def gcd(a, b):
    while a:
        a, b = b % a, a
    print b
➜  Desktop  python Test.py 40, 48
['Test.py', '40,', '48']           # Note that argv has three items and first is the file name
Traceback (most recent call last):
  File "Test.py", line 4, in <module>
    a, b = argv
ValueError: too many values to unpack
➜  Desktop  python Test.py 40,48 
['Test.py', '40,48']
Test.py 40,48

其次,為什么在第二種情況下我沒有輸出?

這是因為根本不調用函數gcd


為了解決這個問題,因為您只希望有兩個項目,所以我只需要像這樣分配它們

a = int(argv[1])
b = int(argv[2])

然后像這樣調用函數

gcd(a, b)

我們需要將值轉換為整數,因為參數將是字符串。

注意:另外,傳遞的參數需要用空格字符而不是逗號分隔。 因此,您將像這樣執行程序

from sys import argv

def gcd(a, b):
    while a:
        a, b = b % a, a
    print b

a = int(argv[1])
b = int(argv[2])

gcd(a, b)

➜  Desktop  python Test.py 40 48
8

文件名euclidian_algorithm.py也是參數之一。 另外,像示例中那樣解壓縮參數也是非常不好的做法。

首先,不要用逗號分隔參數,否則這些逗號將顯示在sys.argv 其次, sys.argv的第一個元素是腳本的名稱。 因此,在您的情況下, sys.argv == ['euclidian_algorithm.py', '40,', '48']

你有沒有輸出的原因, python euclidian_algorithm.py 40,48是因為當時在沒有錯誤a,b = argv ,因為你只有在兩個項目argv (腳本的名稱和參數), 因為你不實際調用gcd() ,僅對其進行定義。

如果運行了它,將會出錯,因為argv包含字符串,而您將ab視為int

這是您應該做的:

from sys import argv

a, b = [int(x) for x in argv[1:3]]

def gcd(a, b):
    while a:
        a,b = b%a, a
    return b

print gcd(a, b)

嘗試使用“ a,b = argv [1:]”,因為文件名是返回的第一個值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM