Python函數(shù)的參數(shù)類型主要包括必選參數(shù)、可選參數(shù)、可變參數(shù)、位置參數(shù)和關(guān)鍵字參數(shù),本文介紹一下他們的定義以及可變數(shù)據(jù)類型參數(shù)傳遞需要注意的地方。
10年積累的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有二道江免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
必選參數(shù)(Required arguments)是必須輸入的參數(shù),比如下面的代碼,必須輸入2個(gè)參數(shù),否則就會(huì)報(bào)錯(cuò):
其實(shí)上面例子中的參數(shù) num1和num2也屬于關(guān)鍵字參數(shù),比如可以通過如下方式調(diào)用:
執(zhí)行結(jié)果:
可選參數(shù)(Optional arguments)可以不用傳入函數(shù),有一個(gè)默認(rèn)值,如果沒有傳入會(huì)使用默認(rèn)值,不會(huì)報(bào)錯(cuò)。
位置參數(shù)(positional arguments)根據(jù)其在函數(shù)定義中的位置調(diào)用,下面是pow()函數(shù)的幫助信息:
x,y,z三個(gè)參數(shù)的的順序是固定的,并且不能使用關(guān)鍵字:
輸出:
在上面的pow()函數(shù)幫助信息中可以看到位置參數(shù)后面加了一個(gè)反斜杠 / ,這是python內(nèi)置函數(shù)的語法定義,Python開發(fā)人員不能在python3.8版本之前的代碼中使用此語法。但python3.0到3.7版本可以使用如下方式定義位置參數(shù):
星號(hào)前面的參數(shù)為位置參數(shù)或者關(guān)鍵字參數(shù),星號(hào)后面是強(qiáng)制關(guān)鍵字參數(shù),具體介紹見強(qiáng)制關(guān)鍵字參數(shù)。
python3.8版本引入了強(qiáng)制位置參數(shù)(Positional-Only Parameters),也就是我們可以使用反斜杠 / 語法來定義位置參數(shù)了,可以寫成如下形式:
來看下面的例子:
python3.8運(yùn)行:
不能使用關(guān)鍵字參數(shù)形式賦值了。
可變參數(shù) (varargs argument) 就是傳入的參數(shù)個(gè)數(shù)是可變的,可以是0-n個(gè),使用星號(hào)( * )將輸入?yún)?shù)自動(dòng)組裝為一個(gè)元組(tuple):
執(zhí)行結(jié)果:
關(guān)鍵字參數(shù)(keyword argument)允許將任意個(gè)含參數(shù)名的參數(shù)導(dǎo)入到python函數(shù)中,使用雙星號(hào)( ** ),在函數(shù)內(nèi)部自動(dòng)組裝為一個(gè)字典。
執(zhí)行結(jié)果:
上面介紹的參數(shù)可以混合使用:
結(jié)果:
注意:由于傳入的參數(shù)個(gè)數(shù)不定,所以當(dāng)與普通參數(shù)一同使用時(shí),必須把帶星號(hào)的參數(shù)放在最后。
強(qiáng)制關(guān)鍵字參數(shù)(Keyword-Only Arguments)是python3引入的特性,可參考:。 使用一個(gè)星號(hào)隔開:
在位置參數(shù)一節(jié)介紹過星號(hào)前面的參數(shù)可以是位置參數(shù)和關(guān)鍵字參數(shù)。星號(hào)后面的參數(shù)都是強(qiáng)制關(guān)鍵字參數(shù),必須以指定參數(shù)名的方式傳參,如果強(qiáng)制關(guān)鍵字參數(shù)沒有設(shè)置默認(rèn)參數(shù),調(diào)用函數(shù)時(shí)必須傳參。
執(zhí)行結(jié)果:
也可以在可變參數(shù)后面命名關(guān)鍵字參數(shù),這樣就不需要星號(hào)分隔符了:
執(zhí)行結(jié)果:
在Python對(duì)象及內(nèi)存管理機(jī)制中介紹了python中的參數(shù)傳遞屬于對(duì)象的 引用傳遞 (pass by object reference),在編寫函數(shù)的時(shí)候需要特別注意。
先來看個(gè)例子:
執(zhí)行結(jié)果:
l1 和 l2指向相同的地址,由于列表可變,l1改變時(shí),l2也跟著變了。
接著看下面的例子:
結(jié)果:
l1沒有變化!為什么不是[1, 2, 3, 4]呢?
l = l + [4]表示創(chuàng)建一個(gè)“末尾加入元素 4“的新列表,并讓 l 指向這個(gè)新的對(duì)象,l1沒有進(jìn)行任何操作,因此 l1 的值不變。如果要改變l1的值,需要加一個(gè)返回值:
結(jié)果:
下面的代碼執(zhí)行結(jié)果又是什么呢?
執(zhí)行結(jié)果:
和第一個(gè)例子一樣,l1 和 l2指向相同的地址,所以會(huì)一起改變。這個(gè)問題怎么解決呢?
可以使用下面的方式:
也可以使用淺拷貝或者深度拷貝,具體使用方法可參考Python對(duì)象及內(nèi)存管理機(jī)制。這個(gè)問題在Python編程時(shí)需要特別注意。
本文主要介紹了python函數(shù)的幾種參數(shù)類型:必選參數(shù)、可選參數(shù)、可變參數(shù)、位置參數(shù)、強(qiáng)制位置參數(shù)、關(guān)鍵字參數(shù)、強(qiáng)制關(guān)鍵字參數(shù),注意他們不是完全獨(dú)立的,比如必選參數(shù)、可選參數(shù)也可以是關(guān)鍵字參數(shù),位置參數(shù)可以是必選參數(shù)或者可選參數(shù)。
另外,python中的參數(shù)傳遞屬于對(duì)象的 引用傳遞 ,在對(duì)可變數(shù)據(jù)類型進(jìn)行參數(shù)傳遞時(shí)需要特別注意,如有必要,使用python的拷貝方法。
參考文檔:
--THE END--
Python 星號(hào)表達(dá)式(starred expression)。出現(xiàn)在函數(shù)的參數(shù)中的星號(hào)表達(dá)式?*args?用于將傳入的可迭代參數(shù)序列解析出來,并存入args中。
* 會(huì)將傳入的參數(shù)放入名為args的元組中?
** 會(huì)將傳入的參數(shù)放入名為kwargs的字典中
給個(gè)鏈接你,別人的博客:
網(wǎng)頁鏈接
幫你解釋清楚了,給句謝謝吧
1 在 Python 2.2 :
? ? 要引用: from __future__ import division
" / "就表示 浮點(diǎn)數(shù)除法,返回浮點(diǎn)結(jié)果;" // "表示整數(shù)除法。
2? ? Python 3以后? :
" / "就表示 浮點(diǎn)數(shù)除法,返回浮點(diǎn)結(jié)果;" // "表示整數(shù)除法。
python? //10 除以10 然后向下取整
在 Python 中,* 和 ** 具有語法多義性,具體來說是有四類用法。
1. 算數(shù)運(yùn)算
* ?代表乘法
** 代表乘方
2*5
10
2**5
32
2. 函數(shù)形參
*args 和 **kwargs 主要用于函數(shù)定義。
你可以將不定數(shù)量的參數(shù)傳遞給一個(gè)函數(shù)。不定的意思是:預(yù)先并不知道, 函數(shù)使用者會(huì)傳遞多少個(gè)參數(shù)給你, 所以在這個(gè)場(chǎng)景下使用這兩個(gè)關(guān)鍵字。其實(shí)并不是必須寫成 *args 和 **kwargs。 ?*(星號(hào)) 才是必須的. 你也可以寫成 *ar ?和 **k 。而寫成 *args 和**kwargs 只是一個(gè)通俗的命名約定。
python函數(shù)傳遞參數(shù)的方式有兩種:
位置參數(shù)(positional argument)
關(guān)鍵詞參數(shù)(keyword argument)
*args 與 **kwargs 的區(qū)別,兩者都是 python 中的可變參數(shù):
*args 表示任何多個(gè)無名參數(shù),它本質(zhì)是一個(gè) tuple
**kwargs 表示關(guān)鍵字參數(shù),它本質(zhì)上是一個(gè) dict
如果同時(shí)使用 *args 和 **kwargs 時(shí),必須 *args 參數(shù)列要在 **kwargs 之前。
deffun(*args, **kwargs):
... print('args=', args)
... print('kwargs=', kwargs)
...
fun(1,2,3,4, A='a', B='b', C='c', D='d')
args= (1,2,3,4)
kwargs= {'A':'a','B':'b','C':'c','D':'d'}
使用 *args
deffun(name, *args):
... print('你好:', name)
... foriinargs:
... print("你的寵物有:", i)
...
fun("Geek","dog","cat")
你好: Geek
你的寵物有: dog
你的寵物有: cat
使用?**kwargs
deffun(**kwargs):
... forkey, valueinkwargs.items():
... print("{0} 喜歡 {1}".format(key, value))
...
fun(Geek="cat", cat="box")
Geek 喜歡 cat
cat 喜歡 box
3. 函數(shù)實(shí)參
如果函數(shù)的形參是定長(zhǎng)參數(shù),也可以使用 *args 和 **kwargs 調(diào)用函數(shù),類似對(duì)元組和字典進(jìn)行解引用:
deffun(data1, data2, data3):
... print("data1: ", data1)
... print("data2: ", data2)
... print("data3: ", data3)
...
args = ("one",2,3)
fun(*args)
data1:? one
data2:2
data3:3
kwargs = {"data3":"one","data2":2,"data1":3}
fun(**kwargs)
data1:3
data2:2
data3:? one
4. 序列解包
a, b, *c =0,1,2,3
a
b
1
c
[2,3]
一:數(shù)學(xué)運(yùn)算符,*表示乘法,**表示取冪,如:
二:用在變量的前面。
1,向函數(shù)傳遞參數(shù),將變量中可迭代對(duì)象的元素拆解出來,作為獨(dú)立的參數(shù)第傳給函數(shù),如:
雙引號(hào)(**),變量為字典,將其拆解出來,單獨(dú)傳給函數(shù)。如:
2,在函數(shù)定義中使用,收集參數(shù)。將參數(shù)捕捉到一個(gè)元組中,如:
該用法允許我們創(chuàng)建自己的函數(shù)時(shí),可以接收任意數(shù)量的參數(shù)。
雙星號(hào)可以將參數(shù)捕捉到字典中,如:
網(wǎng)頁名稱:python函數(shù)內(nèi)星號(hào) python函數(shù)參數(shù)加星號(hào)
網(wǎng)頁路徑:http://muchs.cn/article30/hphcpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、全網(wǎng)營(yíng)銷推廣、域名注冊(cè)、網(wǎng)站排名、外貿(mào)網(wǎng)站建設(shè)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)