python学习之函数的参数类型
生活随笔
收集整理的這篇文章主要介紹了
python学习之函数的参数类型
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
函數(shù)的參數(shù)類(lèi)型有很多,比如說(shuō):位置參數(shù)、默認(rèn)值參數(shù)、關(guān)鍵參數(shù)、命名關(guān)鍵參數(shù)、可變長(zhǎng)度參數(shù)
(1)>>> 函數(shù)名????????????? 查看函數(shù)的內(nèi)存地址
(2)>>>dir(函數(shù)名)???????? 查看函數(shù)的屬性
?
一、位置參數(shù)(positional arguments),調(diào)用時(shí)實(shí)參和形參的順序必須嚴(yán)格一致,并且實(shí)參和形參的數(shù)量必須相同。
#定義 def power(x,n):s = 1while n > 0:n -= 1s *= xreturn s #調(diào)用 power(5)#錯(cuò)誤 power(4,5)#正確?
二、默認(rèn)值參數(shù)
#在上面的代碼中,我們計(jì)算的是x的n次方,如果我們經(jīng)常計(jì)算x的平方,我們可以用默認(rèn)值參數(shù),注意默認(rèn)值參數(shù)只能出現(xiàn)在函數(shù)參數(shù)的最后 def power(n=2,x):#錯(cuò)誤的passdef power(x,n=2):#正確的s = 1while n > 0:n -= 1s *= xreturn s#調(diào)用 power(5)#正確,計(jì)算5的平方 power(5,3)#這也是正確的,計(jì)算的是n>2的情況#注意,如果默認(rèn)值參數(shù)使用不當(dāng)會(huì)導(dǎo)致很難發(fā)現(xiàn)的邏輯錯(cuò)誤 #例如 def demo(newlist,old_list=[]):old_list.appen(newlist)return old_list print(demo('5',[1,2,3,4]))#[1,2,3,4,5] print(demo('aaa',['a','b']))#['a','b','aaa'] print(demo('a'))#['a'] print(demo('b'))#['a','b'],這是因?yàn)樯弦粋€(gè)語(yǔ)句中只傳入了一個(gè)參數(shù)即newlist,所以返回的old_list = ['a'],當(dāng)再次調(diào)用時(shí),雖然只傳入了一個(gè)參數(shù),但是此時(shí)old_list已經(jīng)被定義了#要解決這個(gè)問(wèn)題,謹(jǐn)記:默認(rèn)參數(shù)必須指向不變的變量 def demo(newlist,old_list=None):#None不變對(duì)象作為默認(rèn)參數(shù)pass#注意 #(1)默認(rèn)值參數(shù)只在函數(shù)定義時(shí)被解釋一次 #(2)可以使用“函數(shù)名.__defaults__”查看所有默認(rèn)參數(shù)的當(dāng)前值 #例如 demo.__defaults__#首先有個(gè)學(xué)生注冊(cè)的函數(shù),需要傳入name和gender兩個(gè)參數(shù) def enroll(name,gender):print('name:',name)print('gender:',gender)#那如果我還想傳入年齡、城市等信息怎么辦呢?可以把年齡設(shè)置為默認(rèn)參數(shù) def enroll(name,gender,age=16,city='BeiJing'):print('name:',name)print('gender:',gender)print('age:',age)print('city:',city) #調(diào)用 enroll('Lucy','M')#那么如果我調(diào)用的順序不一致呢??
?
? 三、關(guān)鍵參數(shù)
#關(guān)鍵參數(shù)主要指實(shí)參,即調(diào)用函數(shù)時(shí)的參數(shù)傳遞方式,通過(guò)關(guān)鍵參數(shù),實(shí)參順序和形參順序可以不一致 def demo(a,b,c=5):print(a,b,c) #調(diào)用 demo(3,7)#3 7 5 demo(a=7,b=3,c=6)#7 3 6 demo(c=8,a=9,b=0)#9 0 8?
?
四、可變長(zhǎng)度參數(shù)
#可變長(zhǎng)度參數(shù)主要有2種方式 #(1)*parameter用來(lái)接收多個(gè)實(shí)參并將其放在一個(gè)元組中 #(2)**parameter接收關(guān)鍵參數(shù)并存放到字典中,這里的關(guān)鍵參數(shù)必須要有鍵值對(duì)#*parameter的用法 def demo(*parameter):print(parameter) #調(diào)用 demo(1,2,3)#**parameter的用法 def demo(**parameter):for item in p.items():print(item) #調(diào)用 demo(x=1,y=2,z=3) #輸出 ('x',1) ('y',2) ('z',3)#假如你在開(kāi)發(fā)一個(gè)用戶注冊(cè)功能,除了用戶名和年齡是必填項(xiàng),其他是可選項(xiàng),例如有的用戶想要輸出城市,另外一個(gè)用戶想輸出職業(yè)等等,如何設(shè)計(jì)注冊(cè)功能函數(shù)??
?
五、注冊(cè)問(wèn)題深入探究
def person(name,age,**kw):print('name:',name,'age:',age,'other:',kw)#只傳入必選參數(shù) person('Marry',30)#name:Marry age:30 other:{}#傳入任意其他參數(shù),滿足注冊(cè)的需求 person('Bob',39,city='BeiJing')#name:Bob age 39 other:{'city':BeiJing},在這里kw是一個(gè)字典 person('Peter',40,gender='M',job='Engineer')#name:Peter age=40 other:{'gender':M,'job':'Engineer'}#封裝為字典,再傳入?yún)?shù) extra = {'city':'BeiJing','job':'Engineer'} person('Jack',25,**extra)#那么如果我想確定可選參數(shù)的名字怎么辦呢?需要命名關(guān)鍵字參數(shù) #用特殊符號(hào)*分隔,*后面的視為命名關(guān)鍵字參數(shù) def person(name,age,*,city,job):print('name:',name,'age:',age,'city:',city,'job:'job)#調(diào)用 person('Jack',40,city='BeiJing',job='Engineer')#name:Jack age:40 city:BeiJing job:Engineer#那么如果我輸入的關(guān)鍵字參數(shù)既有大寫(xiě)又有小寫(xiě),按照上面的方法出錯(cuò)了怎么辦呢? #考慮如果沒(méi)有*是什么參數(shù),yes,是位置參數(shù) #這樣就強(qiáng)制要求輸入小寫(xiě) def person(name,age,city,job):pass?
?
六、可變長(zhǎng)度參數(shù)
#幾種不同類(lèi)型的參數(shù)可以混合使用,但是不建議這樣做def func_4(a,b,c=4,*aa,**bb):print(a,b,c)print(aa)print(bb)#調(diào)用 func_4(1,2,3,4,5,6,7,8,9,xx='1',yy='2','zz'='3') #輸出 (1,2,3) (4,5,6,7,8,9) {'xx':'1','yy':'2','zz':'3'}?
轉(zhuǎn)載于:https://www.cnblogs.com/BASE64/p/10961268.html
總結(jié)
以上是生活随笔為你收集整理的python学习之函数的参数类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Pytorch学习(一)—— 自动求导机
- 下一篇: websocket python爬虫_p