亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么非默認參數不能跟隨默認參數?

為什么非默認參數不能跟隨默認參數?

墨色風雨 2019-10-06 14:58:14
為什么這段代碼會引發SyntaxError?  >>> def fun1(a="who is you", b="True", x, y):...     print a,b,x,y...   File "<stdin>", line 1SyntaxError: non-default argument follows default argument以下代碼段運行時沒有可見錯誤:>>> def fun1(x, y, a="who is you", b="True"):...     print a,b,x,y... 
查看完整描述

3 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

必須將所有必需的參數放在任何默認參數之前。僅僅是因為它們是強制性的,而默認參數不是必需的。從語法上講,如果允許使用混合模式,則解釋器將無法決定哪些值與哪些參數匹配。SyntaxError如果參數的輸入順序不正確,則會引發A :


讓我們使用您的函數來查看關鍵字參數。


def fun1(a="who is you", b="True", x, y):

...     print a,b,x,y

假設其允許聲明函數如上,然后使用上述聲明,我們可以進行以下(常規)位置或關鍵字參數調用:


func1("ok a", "ok b", 1)  # Is 1 assigned to x or ?

func1(1)                  # Is 1 assigned to a or ?

func1(1, 2)               # ?

您將如何建議在函數調用中分配變量,如何將默認參數與關鍵字參數一起使用。


>>> def fun1(x, y, a="who is you", b="True"):

...     print a,b,x,y

... 

參考O'Reilly-Core-Python

其中,此函數在語法上正確地使用了上述函數調用的默認參數。事實證明,關鍵字參數調用對于提供亂序的位置參數很有用,但是與默認參數結合使用,它們也可以用于“跳過”缺少的參數。


查看完整回答
反對 回復 2019-10-06
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

SyntaxError: non-default argument follows default argument

如果您允許這樣做,則默認參數將變得無用,因為您將永遠無法使用其默認值,因為非默認參數在之后。


但是,在Python 3中,您可以執行以下操作:


def fun1(a="who is you", b="True", *, x, y):

    pass

它只能使用x和y關鍵字,因此您可以執行以下操作:


fun1(x=2, y=2)

之所以可行,是因為不再有任何歧義。請注意,您仍然無法執行操作fun1(2, 2)(這將設置默認參數)。


查看完整回答
反對 回復 2019-10-06
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

讓我在這里澄清兩點:


首先,非默認參數不應跟隨默認參數,這意味著您無法在函數中定義(a = b,c),而在函數中定義參數的順序為:

位置參數或非默認參數,即(a,b,c)

關鍵字參數或默認參數,即(a =“ b”,r =“ j”)

僅關鍵字參數,即(* args)

var-keyword參數,即(** kwargs)

def example(a, b, c=None, r="w" , d=[], *ae,  **ab):


(a,b)是位置參數


(c = none)是可選參數


(r =“ w”)是關鍵字參數


(d = [])是列表參數


(* ae)僅用于關鍵字


(** ab)是var-keyword參數


現在第二件事是,如果我嘗試這樣的事情: def example(a, b, c=a,d=b):

保存默認值時未定義參數,定義函數時Python計算并保存默認值


當發生這種情況時,c和d未定義,不存在(僅在執行函數時存在)


參數“ a,a = b”不允許使用。


查看完整回答
反對 回復 2019-10-06
  • 3 回答
  • 0 關注
  • 1104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號