[英]Why can't both args and keyword only arguments be mixed with *args and **kwargs simultaneously
[英]Why can't keyword args precede variable position args?
我正在使用python 3.3。 考慮這個功能:
def foo(action, log=False,*args) :
print(action)
print(log)
print(args)
print()
以下調用按預期工作:
foo("A",True,"C","D","E")
A
True
('C', 'D', 'E')
但是這個沒有。
foo("A",log=True,"C","D","E")
SyntaxError: non-keyword arg after keyword arg
為什么會這樣?
這會以某種方式引入歧義嗎?
考慮以下:
def foo(bar="baz", bat=False, *args):
...
現在,如果我打電話
foo(bat=True, "bar")
“酒吧”在哪里? 或者:
bar = "bar", bat = True, args = ()
或 bar = "baz", bat = True, args = ("bar",)
或者甚至 bar = "baz", bat = "bar", args = ()
並且沒有明顯的選擇(至少在前兩個之間)它應該是哪一個。 我們希望bat = True
到“消費”的第二個參數插槽,但目前還不清楚該命令其余的參數應在食用:把它當作如果bat
完全不存在,移動一切向左,或把它當作如果bat
將“光標”移動到自己的下一個參數上。 或者,如果我們想做一些真正奇怪的事情,我們可以辯護說,無論是否傳遞了其他關鍵字參數,參數元組中的第二個參數始終與第二個位置參數一起使用。
無論如何,我們留下了一些令人困惑的東西,有人會驚訝我們選擇哪一個而不管它是哪一個。 Python旨在簡單而干凈,並且希望避免任何可能不直觀的語言設計選擇。 應該有一個 - 最好只有一個 - 顯而易見的方法 。
關鍵字參數的功能是雙重的:
在有序參數之前提供關鍵字參數時,提供關鍵字和有序參數的混合只是一個問題。 為什么是這樣?
兩個原因:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.