python自定義函數(shù)def的應(yīng)用詳解
這里是三歲,來和大家嘮嘮自定義函數(shù),這一個(gè)神奇的東西,帶大家白話玩轉(zhuǎn)自定義函數(shù)
自定義函數(shù),編程里面的精髓!
def
自定義函數(shù)的必要函數(shù):def
使用方法:
def 函數(shù)名(參數(shù)1,參數(shù)2,參數(shù)…): 函數(shù)體(語句塊) return [返回值]
注意事項(xiàng)
- 函數(shù)名的命名規(guī)則:和標(biāo)識符的基本規(guī)則是一樣的,基本上由小寫字母和數(shù)字下劃線構(gòu)成
- def 是關(guān)鍵字,不能夠修改(define的簡稱)
- 函數(shù)后面一定要加括號(英文狀態(tài)的)括號里面是否加參數(shù)看具體情況
- 括號后面的冒號不能夠忘記
- 函數(shù)體必須加上縮進(jìn)(建議4個(gè)空格)
案例分析
def hello(): #自定義hello()函數(shù) print('hello world !') hello() # 調(diào)用函數(shù) hello world ! # 輸出結(jié)果
該處是定義了一個(gè)輸出‘hello world !'的函數(shù),只要調(diào)用hello()即可實(shí)現(xiàn)對函數(shù)體的調(diào)用。
來個(gè)復(fù)雜點(diǎn)的練練手,感受一下磨刀霍霍向木蘭
def add(x, y): # 新建add() return x+y add(3, 7) # 調(diào)用add() 運(yùn)行ing 輸出none
啊累累!啊累累!啊累累!
我寫了個(gè)bug還是寫了一個(gè)寂寞?
哦哦哦!我建了一個(gè)房子沒有留門(淚目)
沒有輸出怎么能夠有結(jié)果?
print(add(3, 7)) print(add('hello ', 'world')) #運(yùn)行結(jié)果 10 hello world
作死挑戰(zhàn)
記得每一次調(diào)用函數(shù)都加了 ()那么不加括號的是什么東西?
難道就是傳說中的寫了個(gè)寂寞還是什么東西?
讓我們一起來作死看看
print(hello) # 調(diào)用hello print(add) # 調(diào)用add 結(jié)果: <function hello at 0x0000020213737048> <function add at 0x0000020213737678>
哇哦!他真的可以有
經(jīng)過查詢他顯示的是這個(gè)函數(shù)的內(nèi)存地址,而不是這個(gè)函數(shù)的結(jié)果什么的,函數(shù)并沒有被調(diào)用
- 溫馨提示
- 調(diào)用函數(shù)一定要在函數(shù)名后面加上括號
函數(shù)參數(shù)
自定義函數(shù)的參數(shù),分為幾大類:
- 位置傳參
- 關(guān)鍵字傳參
- 必選參數(shù)
- 默認(rèn)參數(shù)
- 可變參數(shù)
- ……
形參與實(shí)參
白話時(shí)間:(個(gè)人理解基礎(chǔ)的表達(dá),如有不同之處請指教提出)
形參:
就是參數(shù)名稱,一個(gè)沒有被賦值的變量名,不會實(shí)際的參與函數(shù)的運(yùn)算,而是起到一個(gè)類似占位符的作用。
實(shí)參:
實(shí)際參加函數(shù)運(yùn)算的值,已經(jīng)賦值給了相對應(yīng)的變量名。
ps:以上基于個(gè)人理解,本非準(zhǔn)確表達(dá),在個(gè)人理解基礎(chǔ)上的白話表達(dá)
位置參數(shù)
位置參數(shù)就是按照參數(shù)的位置進(jìn)行表達(dá)和相對應(yīng)的
參數(shù)寫的位置決定了它所對應(yīng)的值,這種寫法如果有多個(gè)參數(shù)必須注意,寫錯(cuò)位置整個(gè)函數(shù)有可能會報(bào)錯(cuò),整個(gè)程序有可能會奔潰?。。?/p>
關(guān)鍵字參數(shù)
關(guān)鍵字參數(shù)雖然寫法較為麻煩但是很好的解決了多個(gè)參數(shù)因?yàn)槲恢缅e(cuò)誤導(dǎo)致的函數(shù)報(bào)錯(cuò)及程序不穩(wěn)定問題
通過定義的參數(shù)名稱來確定對應(yīng)參數(shù)的值,可以有效的解決問題
例:print() 里面除了經(jīng)常用的輸出內(nèi)容還有end參數(shù)
end參數(shù)默認(rèn)是‘\n',如果通過關(guān)鍵字參數(shù)進(jìn)行重新定義就可以改變
for i in range(10): print(i)
結(jié)果:
0
1
2
3
4
5
6
7
8
9
for i in range(10): print(i,end= ' ')
結(jié)果:
0 1 2 3 4 5 6 7 8 9
默認(rèn)參數(shù)
在函數(shù)涉及過程中很多參數(shù)不一定所有人一定用的上,可以設(shè)置一個(gè)默認(rèn)值,這樣子需要的人可以DIY,沒有需要的就采用默認(rèn)參數(shù)
比如print()中 end 就是默認(rèn)參數(shù)默認(rèn)值為‘\n'
def add(x=0, y=0): return x+y print(add()) 結(jié)果: 0
必選參數(shù)
必選參數(shù)就是必須要寫的參數(shù),這個(gè)與默認(rèn)參數(shù)相對,不是默認(rèn)參數(shù)就是必選參數(shù),如果沒有對必選參數(shù)進(jìn)行導(dǎo)入就會引發(fā)報(bào)錯(cuò),導(dǎo)致系統(tǒng)函數(shù)奔潰
def add(x, y): # 新建add() return x+y print(add()) Traceback (most recent call last): print(add()) TypeError: add() missing 2 required positional arguments: 'x' and 'y'
這個(gè)就是缺少x,y參數(shù)導(dǎo)致的異常。
所有在使用函數(shù)及自定義時(shí)要注意必選參數(shù)的設(shè)置
可變參數(shù)
可變參數(shù)這個(gè)名字比較高大上,但是實(shí)際上很簡單
比如要寫一個(gè)多個(gè)數(shù)字相加的函數(shù)怎么辦呢?
直接寫?
def add(x, y): # 新建add() return x+y
那如果是3個(gè)值呢?
會應(yīng)為多了一個(gè)參數(shù)報(bào)錯(cuò)
那么就改成三個(gè)參數(shù)?
def add(x, y, z): # 新建add() return x+y+z
問題來了如果是2個(gè)值那么就會報(bào)錯(cuò)缺一個(gè)參數(shù),如果是4個(gè)及以上就會報(bào)錯(cuò),多了參數(shù)
啊啊啊啊啊啊啊啊?。?br />
只是什么東西,難度python一世英名就毀在這里了嘛?
不不不!
神奇的事情發(fā)生了
def 函數(shù)名(參數(shù)1,參數(shù)2,參數(shù)…,*可變參數(shù)): 函數(shù)體(語句塊) 返回值
emmm,奇怪的知識增長了
def add(x, *y): for num in y: x += num return x print(add(2,3,4)) 結(jié)果 9
ps:*y 所產(chǎn)生的是一個(gè)tuple(元組)
我們需要先逐個(gè)遍歷才能夠拿到每一個(gè)的結(jié)果。
可變關(guān)鍵字參數(shù)
如果有多個(gè)關(guān)鍵字參數(shù)或者字典的導(dǎo)入使用 *參數(shù)名 無法滿足怎么辦
難道python一世英名就這樣子栽了嗎?
不不不
一個(gè) * 不行那么就來兩個(gè) **
def personinfo(name, age, **message): print(f'name:{name},age:{age},{message}') personinfo('張三', 23, message = {'city':'北京', 'heigh': 180}) 結(jié)果: name:張三,age:23,{'message': {'city': '北京', 'heigh': 180}}
在里面得到的結(jié)果是一個(gè)字典,看例子可以知道得到了一個(gè)鑲嵌的字典
參數(shù)問題解答參數(shù)的書寫要求:
① 必選參數(shù)寫在最前面
②默認(rèn)參數(shù)寫在必選參數(shù)后面
③默認(rèn)參數(shù)后面是關(guān)鍵字參數(shù)
④關(guān)鍵字后面是*函數(shù)名(可變參數(shù))
⑤后面跟著可變關(guān)鍵字參數(shù)(**函數(shù)名)
ps:按照該順序走,沒有的可以不寫
def a(x , y=0, *z, **i): print(f'x:{x};y:{y};z:{z};i')
以上就是舉例子,命名方式不符合規(guī)定,不要借鑒
不安以上方式可能出現(xiàn)各種奇怪的情況
到此這篇關(guān)于python自定義函數(shù)def的應(yīng)用詳解的文章就介紹到這了,更多相關(guān)python自定義函數(shù)def內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Django中實(shí)現(xiàn)添加user到group并查看
今天小編就為大家分享一篇在Django中實(shí)現(xiàn)添加user到group并查看,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11pycharm配置SSH遠(yuǎn)程連接服務(wù)器詳細(xì)步驟(0基礎(chǔ)詳細(xì)版)
PyCharm是一款流行的Python集成開發(fā)環(huán)境(IDE),提供了遠(yuǎn)程連接云服務(wù)器的功能,使得開發(fā)者可以更加便捷地進(jìn)行遠(yuǎn)程開發(fā)和調(diào)試,這篇文章主要給大家介紹了關(guān)于pycharm配置SSH遠(yuǎn)程連接服務(wù)器的詳細(xì)步驟,需要的朋友可以參考下2024-07-07python使用sklearn實(shí)現(xiàn)決策樹的方法示例
這篇文章主要介紹了python使用sklearn實(shí)現(xiàn)決策樹的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09PyTorch梯度裁剪避免訓(xùn)練loss nan的操作
這篇文章主要介紹了PyTorch梯度裁剪避免訓(xùn)練loss nan的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05使用Python的Twisted框架編寫非阻塞程序的代碼示例
Twisted是基于異步模式的開發(fā)框架,因而利用Twisted進(jìn)行非阻塞編程自然也是必會的用法,下面我們就來一起看一下使用Python的Twisted框架編寫非阻塞程序的代碼示例:2016-05-05