2 回答

TA貢獻1796條經驗 獲得超10個贊
兩者都不是最好的。每種風格在不同情況下都有好處。
大多數時候使用單個可迭代參數會更好,特別是如果調用者已經將 URL 打包到列表中。如果他們有一個列表并且需要使用 varargs 樣式,則他們需要調用process_urls(*existing_list_of_URLs)whoild 不必要地解包然后重新打包參數。正如John Kugelman在他的回答中所建議的那樣,您可能不應該使用顯式類型檢查來強制參數的類型,只需假設它是一個可迭代的并從那里開始工作。
如果您的函數主要使用單獨的 URL 調用,則使用可變參數列表可能比需要列表更好。比如,也許網址是硬編碼是這樣的:process_urls("http://example.com", "https://stackoverflow.com")。或者它們可能在單獨的變量中,但要使用的特定變量直接編碼為:process_url(primary_url, backup_url)。
最后一個選擇:支持這兩種方法!您可以指定您的函數接受一個或多個參數。如果它只得到一個,它需要一個包含 URL 的可迭代對象。如果它得到多個參數,它希望每個參數都是一個單獨的 URL。這可能是這樣的:
def process_urls(*args):
if len(args) == 1:
args = args[0]
# do stuff with args, which is an iterable of URLs
這樣做有一個缺點,即自身傳遞的單個 URL 字符串將被錯誤地識別為一系列 URL,每個 URL 由原始字符串中的一個字符組成。這是一個非常尷尬的失敗案例,因此您可能需要明確檢查它。您可以選擇引發異常,或者只接受單個字符串作為參數,就像它在容器中一樣。
添加回答
舉報