课时18:函数:灵活即强大
目錄:
一、形參和實(shí)參
二、函數(shù)文檔
三、關(guān)鍵字參數(shù)
四、默認(rèn)參數(shù)
五、收集參數(shù)
六、課時(shí)18課后習(xí)題及答案
?
******************
一、形參和實(shí)參
******************
函數(shù)從調(diào)用的角度來說,分為形式參數(shù)和實(shí)際 參數(shù)。形參是指函數(shù)創(chuàng)建和定義過程中小括號里的參數(shù);而實(shí)參指得是函數(shù)在被調(diào)用過程中傳遞進(jìn)來的參數(shù)。舉個(gè)例子:
>>> def MyFirstFunction(name):'函數(shù)定義過程中的name是叫形參'#因?yàn)門a只是一個(gè)形式,表示占據(jù)一個(gè)參數(shù)位置print('傳遞進(jìn)來的' + name + '叫做實(shí)參,因?yàn)門a是具體的參數(shù)值!')>>> MyFirstFunction('小甲魚') 傳遞進(jìn)來的小甲魚叫做實(shí)參,因?yàn)門a是具體的參數(shù)值!?
****************
二、函數(shù)文檔
****************
給函數(shù)寫文檔是為了讓別人可以更好的理解你的函數(shù),所以這是一個(gè)好習(xí)慣。函數(shù)文檔的作用是描述該函數(shù)的功能。
>>> def exchangeRate(dollar):"""美元—>人民幣匯率暫定為6.5"""return dollar * 6.5>>> exchangeRate(10) 65.0我們發(fā)現(xiàn),在函數(shù)開頭寫下的字符串是不會打印出來的,但它作為函數(shù)的一部分存儲起來。這個(gè)稱為函數(shù)文檔字符串,它的功能跟注釋一樣。
與注釋不同的是,函數(shù)文檔字符串可以通過特殊屬性_ _doc_ _(注:_ _doc_ _兩邊分別是兩條下劃線):
>>> exchangeRate(10) 65.0 >>> exchangeRate.__doc__ '美元—>人民幣\n\t匯率暫定為6.5\n\t'另外,想用一個(gè)函數(shù)但不知道其用法時(shí),會通過help()函數(shù)查看函數(shù)的文檔。因此,對自己的函數(shù)也可以如法炮制:
>>> help(exchangeRate) Help on function exchangeRate in module __main__:exchangeRate(dollar)美元—>人民幣匯率暫定為6.5?
******************
三、關(guān)鍵字參數(shù)
******************
普通的參數(shù)叫做位置參數(shù),使用位置參數(shù)可以解決程序員在調(diào)用一個(gè)函數(shù)時(shí)候,搞亂位置參數(shù)的順序,以至于函數(shù)無法按照預(yù)期實(shí)現(xiàn)的潛在問題。來看個(gè)例子:
>>> def saySomething(name,words):print(name + "—>" +words)>>> saySomething("小甲魚","讓編程改變世界!") 小甲魚—>讓編程改變世界! >>> saySomething("讓編程改變世界!","小甲魚") 讓編程改變世界!—>小甲魚 >>> saySomething(words="讓編程改變世界!",name="小甲魚") 小甲魚—>讓編程改變世界!關(guān)鍵字參數(shù)其實(shí)就是在傳入實(shí)參時(shí)指定形參的變量名,盡管使用這種技巧要多打一些字,但隨著程序規(guī)模的越來越大、參數(shù)越來越多,關(guān)鍵字參數(shù)起到的作用就越明顯。
?
****************
四、默認(rèn)參數(shù)
****************
默認(rèn)參數(shù)就是在定義的時(shí)候賦予了默認(rèn)值的參數(shù):
>>> def saySomething(name="小甲魚",words="讓編程改變世界!"):print(name + '—>' +words)>>> saySomething() 小甲魚—>讓編程改變世界! >>> saySomething("DC","有時(shí)候最意想不到的人 才能做出最超乎想象的事") DC—>有時(shí)候最意想不到的人 才能做出最超乎想象的事使用默認(rèn)參數(shù)的話,就可以不帶參數(shù)去調(diào)用函數(shù)。所以,它們之間的區(qū)別是:關(guān)鍵字參數(shù)是在函數(shù)調(diào)用的時(shí)候,通過參數(shù)名指定要賦值的參數(shù),這樣做就不怕因?yàn)楦悴磺鍏?shù)的順序而導(dǎo)致函數(shù)的調(diào)用出錯(cuò);而默認(rèn)參數(shù)是在參數(shù)定義過程中,為形參賦初值,當(dāng)函數(shù)調(diào)用的時(shí)候,不傳遞參數(shù),則默認(rèn)使用形參的初始值代替。
?
****************
五、收集參數(shù)
****************
收集參數(shù)在大多數(shù)的時(shí)候被稱作可變參數(shù),僅需要在參數(shù)前面加上星號(*)即可:
>>> def test(*params):print("有%d個(gè)參數(shù)"%len(params))print("第二個(gè)參數(shù)是:",params[1])>>> test(1,2,3,4,5,6,7,8) 有8個(gè)參數(shù) 第二個(gè)參數(shù)是: 2 >>> test("小甲魚",123,3.14) 有3個(gè)參數(shù) 第二個(gè)參數(shù)是: 123Python就是把標(biāo)志為收集參數(shù)的參數(shù)們打包成一個(gè)元組。不過,需要注意的是:如果在收集參數(shù)的后面還需要指定其它參數(shù),在調(diào)用函數(shù)的時(shí)候就應(yīng)該使用關(guān)鍵字參數(shù)來指定,否則Python就都會把你的實(shí)參都列入收集參數(shù)的范疇。舉個(gè)例子:
>>> def test(*params,extra):print("收集參數(shù)是",params)print("位置參數(shù)是",extra)>>> test(1,2,3,4,5,6,7,8) Traceback (most recent call last):File "<pyshell#38>", line 1, in <module>test(1,2,3,4,5,6,7,8) TypeError: test() missing 1 required keyword-only argument: 'extra' >>> test(1,2,3,4,5,6,7,extra=8) 收集參數(shù)是 (1, 2, 3, 4, 5, 6, 7) 位置參數(shù)是 8建議在參數(shù)中帶有收集參數(shù)是,可以將其它參數(shù)設(shè)置為默認(rèn)參數(shù),這樣不容易出錯(cuò):
>>> test(1,2,3,4,5,6,7,extra=8) 收集參數(shù)是 (1, 2, 3, 4, 5, 6, 7) 位置參數(shù)是 8 >>> def test(*params,extra=8):print("收集參數(shù)是",params)print("位置參數(shù)是",extra)>>> test(1,2,3,4,5,6,7,8) 收集參數(shù)是 (1, 2, 3, 4, 5, 6, 7, 8) 位置參數(shù)是 8 >>> test(1,2,3,4,5,6,7) 收集參數(shù)是 (1, 2, 3, 4, 5, 6, 7) 位置參數(shù)是 8星號(*)其實(shí)既可以”打包“,也可以“解包“。舉個(gè)例子,假如你需要將一個(gè)列表a傳入test參數(shù)的收集參數(shù) *params中,那么調(diào)用test(a)時(shí)便會出錯(cuò),此時(shí),你需要在a前面加上個(gè)星號(*)表示參數(shù)需要"解包"后才能使用:
>>> def test(*params):print("有%d個(gè)參數(shù)"%len(params))print("第二個(gè)參數(shù)是:",params[1])>>> a=[1,2,3,4,5,6,7,8] >>> test(a) 有1個(gè)參數(shù) Traceback (most recent call last):File "<pyshell#47>", line 1, in <module>test(a)File "<pyshell#45>", line 3, in testprint("第二個(gè)參數(shù)是:",params[1]) IndexError: tuple index out of range >>> test(*a) 有8個(gè)參數(shù) 第二個(gè)參數(shù)是: 2Python還有一種收集的形式,就是用兩個(gè)星號(**)表示。跟前面的介紹不同,兩個(gè)星號的收集參數(shù)表示為將參數(shù)們打包成字典的形式。后面講解。
?
*******************************
六、課時(shí)18課后習(xí)題及答案
*******************************
轉(zhuǎn)載于:https://www.cnblogs.com/DC0307/p/9468447.html
總結(jié)
以上是生活随笔為你收集整理的课时18:函数:灵活即强大的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中字符串相关
- 下一篇: [分治] Jzoj P5807 简单的区