python函数参数那些事,关键字参数与位置参数
在調(diào)用函數(shù)時(shí)傳給 function(或 method)的值。參數(shù)分為兩種:
關(guān)鍵字參數(shù)?:在函數(shù)調(diào)用中前面帶有標(biāo)識(shí)符(例如?name=)或者作為包含在前面帶有?**?的字典里的值傳入。舉例來(lái)說(shuō),3?和?5?在以下對(duì) complex()的調(diào)用中均屬于關(guān)鍵字參數(shù):
complex(real=3, imag=5) complex(**{'real': 3, 'imag': 5})位置參數(shù):不屬于關(guān)鍵字參數(shù)的參數(shù)。位置參數(shù)可出現(xiàn)于參數(shù)列表的開(kāi)頭以及/或者作為前面帶有?*?的 iterable里的元素被傳入。舉例來(lái)說(shuō),3?和 5?在以下調(diào)用中均屬于位置參數(shù):
complex(3, 5) complex(*(3, 5))規(guī)則:在函數(shù)調(diào)用中,關(guān)鍵字參數(shù)必須跟隨在位置參數(shù)的后面。傳遞的所有關(guān)鍵字參數(shù)必須與函數(shù)接受的其中一個(gè)參數(shù)匹配,它們的順序并不重要。這也包括非可選參數(shù)。不能對(duì)同一個(gè)參數(shù)多次賦值。
以下是一些正確和錯(cuò)誤范例:
#函數(shù)定義 def test(arg1, arg2='hello', arg3='world', arg4='nice to meet you'):print(arg2, arg3, arg4)#正確范例 test(1000) # 1個(gè)位置參數(shù) test(arg1=1000) # 1個(gè)關(guān)鍵字參數(shù) test(arg1=1000, arg2='VOOOOOM') # 2個(gè)關(guān)鍵字參數(shù) test(arg2='VOOOOOM', arg1=1000) # 2個(gè)關(guān)鍵字參數(shù) test('a million', 'bereft of life', 'jump') # 3個(gè)位置參數(shù) test('a thousand', arg2='pushing up the daisies') # 1個(gè)位置參數(shù),1個(gè)關(guān)鍵字參數(shù)#錯(cuò)誤范例 test() # 缺少一個(gè)參數(shù) test(voltage=5.0, 'dead') # 非關(guān)鍵字參數(shù)在關(guān)鍵字參數(shù)后面 test(110, voltage=220) # 一個(gè)參數(shù)傳了多個(gè)值 test(arg5='John Cleese') # 對(duì)不存在的參數(shù)傳值為了確保可讀性和運(yùn)行效率,我們可以對(duì)每個(gè)參數(shù),使用限制允許的參數(shù)傳遞形式,這樣開(kāi)發(fā)者只需查看函數(shù)定義即可確定參數(shù)項(xiàng)是僅按位置、按位置也按關(guān)鍵字,還是僅按關(guān)鍵字傳遞。
方法就是用/和*作為分隔符,把三種傳遞方法的參數(shù)分隔開(kāi)來(lái)。
def function(arg1, arg2, /, arg3, arg4, *, arg5, arg6):pass如上的函數(shù),arg1和arg2是僅限位置參數(shù),arg3和arg4是位置或關(guān)鍵字參數(shù)都行,arg5和arg6則是僅限關(guān)鍵字參數(shù)。
最后則是官方對(duì)于函數(shù)參數(shù)給出的指導(dǎo):
-
如果你希望形參名稱(chēng)對(duì)用戶(hù)來(lái)說(shuō)不可用,則使用僅限位置形參。 這適用于形參名稱(chēng)沒(méi)有實(shí)際意義,以及當(dāng)你希望強(qiáng)制規(guī)定調(diào)用時(shí)的參數(shù)順序,或是需要同時(shí)收受一些位置形參和任意關(guān)鍵字形參等情況。
-
當(dāng)形參名稱(chēng)有實(shí)際意義,以及顯式指定形參名稱(chēng)可使函數(shù)定義更易理解,或者當(dāng)你想要防止用戶(hù)過(guò)于依賴(lài)傳入?yún)?shù)的位置時(shí),則使用僅限關(guān)鍵字形參。
-
對(duì)于 API 來(lái)說(shuō),使用僅限位置形參可以防止形參名稱(chēng)在未來(lái)被修改時(shí)造成破壞性的 API 變動(dòng)。
總結(jié)
以上是生活随笔為你收集整理的python函数参数那些事,关键字参数与位置参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 这个电脑的双屏幕电脑使用双屏幕
- 下一篇: 一个例子带你搞懂python作用域中的g