Python中如何自定義函數(shù)
Python自定義函數(shù)
在Python編程中,可以使用已經(jīng)定義好的函數(shù),也可以自定義函數(shù)實(shí)現(xiàn)某些特殊的功能。
自定義函數(shù)的語(yǔ)法
在Python中,自定義函數(shù)的語(yǔ)法如下所示
def 函數(shù)名(參數(shù)):
函數(shù)體
其中,def是關(guān)鍵字;之后跟的是函數(shù)名,通過(guò)函數(shù)名來(lái)調(diào)用該函數(shù);函數(shù)名之后是一個(gè)圓括號(hào),圓括號(hào)內(nèi)部是函數(shù)的參數(shù),通過(guò)參數(shù)可以將數(shù)據(jù)傳遞到函數(shù)內(nèi)部;函數(shù)體是函數(shù)實(shí)現(xiàn)的功能。
需要注意的是(1)在圓括號(hào)之后有冒號(hào)(2)函數(shù)體要有縮進(jìn)。
自定義函數(shù)的實(shí)現(xiàn)
圖1的代碼中代碼自定義了一個(gè)名為func的函數(shù)。
圖1 自定義函數(shù)func
其中,該自定義函數(shù)的函數(shù)名是func,i是func的參數(shù)。func()函數(shù)的功能是打印出從0到i-1的數(shù)字,i的值由外部傳遞到函數(shù)內(nèi)部。
自定義函數(shù)的調(diào)用
通過(guò)圖2中的代碼調(diào)用自定義函數(shù)func()。
圖2 調(diào)用func()函數(shù)
其中,func()函數(shù)的參數(shù)設(shè)置為3,此時(shí)輸出的是0-2的數(shù)字;修改func()的參數(shù)值,如圖3所示。
圖3 修改func()函數(shù)的參數(shù)值
此時(shí)輸出的是0-4的數(shù)字。
Python自定義函數(shù)基礎(chǔ)概念
函數(shù)定義語(yǔ)法
def 函數(shù)名(形參列表):
語(yǔ)句塊
函數(shù)定義語(yǔ)句(def 語(yǔ)句) 的完整語(yǔ)法:
[@裝飾器1] [@裝飾器2] [...]
def 函數(shù)名([位置形參], [*元組形參], [命名關(guān)鍵字形參], [**字典形參]):
'''文檔字符串'''
語(yǔ)句塊
注: [] 中括號(hào)代表其內(nèi)部可以省略
函數(shù)文檔字符串
函數(shù)內(nèi)第一次未被賦值給任何變量的字符串是此函數(shù)的文檔字符串。
說(shuō)明:
1. 文檔字符串通常用來(lái)說(shuō)明本函數(shù)的功能和使用方法
2. 在交互模式下輸入: help(函數(shù)名) 可以查看函數(shù)的'文檔字符串'
3. 函數(shù)的文檔字符串綁定在函數(shù)的 __doc__ 屬性上
函數(shù)定義規(guī)則
1. 函數(shù)的名字就是語(yǔ)句塊的名稱(chēng)
2. 函數(shù)名的命名規(guī)則與變量名相同(函數(shù)名必須是標(biāo)識(shí)符)
3. 函數(shù)名是一個(gè)變量(不要輕易對(duì)其賦值)
4. 函數(shù)有自己的名字空間,在函數(shù)外部不可以訪問(wèn)函數(shù)內(nèi)部的變量,在函數(shù)內(nèi)可以訪問(wèn)函數(shù)外部的變量,但不能修改此變量。
5. 函數(shù)如果不需要傳入?yún)?shù),形參列表可以為空
6. 語(yǔ)句塊部分,內(nèi)容不能為空,如果為空需要填充pass
形參定義方式
形參:函數(shù)調(diào)用時(shí),接收調(diào)用時(shí)傳遞的數(shù)據(jù)
【1】位置形參
【2】關(guān)鍵字形參
【3】缺省參數(shù)
def 函數(shù)名(形參名=默認(rèn)實(shí)參1, 形參名2=默認(rèn)實(shí)參2, ...):
pass
缺省參數(shù)必須自右至左依次存在,如果一個(gè)參數(shù)是缺省參數(shù),則其右側(cè)的所有參數(shù)都必須是缺省參數(shù)。
【4】*args
星號(hào)元組形參,收集多余的位置傳參
def 函數(shù)名(*元組形參名):
pass
【5】**kwargs
雙星號(hào)字典形參,收集多余的關(guān)鍵字傳參
def 函數(shù)名(**字典形參名):
pass
【6】不定長(zhǎng)形參
星號(hào)元組形參,雙星號(hào)字典形參
可以接受任意的位置傳參和關(guān)鍵字傳參
def fun(*args,**kwargs):
pass
位置形參,缺省參數(shù),星號(hào)元組形參,雙星號(hào)字典形參可以混合使用.
函數(shù)形參自左至右的順序?yàn)?
- 位置形參
- 星號(hào)元組形參
- 命名關(guān)鍵字形參
- 雙星號(hào)字典形參
函數(shù)調(diào)用
函數(shù)名(實(shí)參)
注:
1. 函數(shù)調(diào)用是一個(gè)表達(dá)式
2. 如果函數(shù)內(nèi)部沒(méi)有return語(yǔ)句,函數(shù)調(diào)用完畢后返回None對(duì)象
3. 如果函數(shù)需要返回其它的對(duì)象需要用到 return 語(yǔ)句
4.函數(shù)名是一個(gè)變量,綁定的是函數(shù)對(duì)象
函數(shù)調(diào)用時(shí)參數(shù)的傳遞形式
【1】位置傳參
實(shí)參和形參的位置對(duì)應(yīng),將實(shí)參數(shù)據(jù)傳遞給函數(shù)形參。
實(shí)參和形參按位置一一對(duì)應(yīng)。
實(shí)參個(gè)數(shù)和形參個(gè)數(shù)必須一致。
【2】序列傳參
位置傳參的一種。
用 * 將序列拆解后按位置進(jìn)行傳遞的傳參方式
【3】關(guān)鍵字傳參
按形參的名稱(chēng)將實(shí)參數(shù)據(jù)傳遞給形參。
實(shí)參和形參按形參名稱(chēng)匹配。
【4】字典關(guān)鍵字傳參
實(shí)參為字典,將字典用 '**' 拆解后再進(jìn)行關(guān)鍵字傳參的傳參方式。
字典的鍵名必須和形參一致,切數(shù)量相同。
字典的鍵必須為字符串。
全局變量與局部變量
【1】全局變量
① 定義在函數(shù)外部,模塊內(nèi)部的變量稱(chēng)為全局變量
② 全局變量所有函數(shù)都可以直接訪問(wèn)(但函數(shù)內(nèi)不能將其直接賦值)
【2】局部變量
① 定義在函數(shù)內(nèi)部的變量稱(chēng)為局部變量(函數(shù)的形參也是局部變量)
② 局部變量只能在函數(shù)內(nèi)部使用
③ 局部變量在函數(shù)調(diào)用時(shí)才能夠被創(chuàng)建,在函數(shù)調(diào)用之后會(huì)自動(dòng)銷(xiāo)毀
函數(shù)的功能性
① 一個(gè)函數(shù)可以作為另一個(gè)函數(shù)調(diào)用時(shí)的實(shí)參,傳遞給此函數(shù)
def f1(): print("f1被調(diào)用") def f2(): print("f2被調(diào)用") def fx(fn): print(fn) fn() # 此時(shí)這是調(diào)用什么呢? fx(f1) fx(f2) #結(jié)果 <function f1 at 0x7f7a52ed6f28> f1被調(diào)用 <function f2 at 0x7f7a51757c80> f2被調(diào)用 #--------------------- def goodbye(L): for x in L: print("再見(jiàn):", x) def hello(L): for x in L: print("你好:", x) def operator(fn, L): fn(L) operator(hello, ['Tom', 'Jerry', 'Spike']) #結(jié)果 你好: Tom 你好: Jerry 你好: Spike
② 一個(gè)函數(shù)可以作為另一個(gè)函數(shù)的返回值
def fx(): return max fn = fx() print(fn([1, 3, 5, 7])) #結(jié)果 7
③ 函數(shù)可以嵌套
函數(shù)式編程
用一系列函數(shù)解決問(wèn)題。
優(yōu)點(diǎn):
【1】用每一個(gè)函數(shù)完成細(xì)小的功能,一系列函數(shù)的任意組合可以完成大問(wèn)題
【2】函數(shù)僅接受輸入并產(chǎn)生輸入,不包含任何能影響輸出的內(nèi)部狀態(tài)
要求:
def 語(yǔ)句創(chuàng)建的函數(shù)最好不要訪問(wèn)局部作用域以外的變量,這樣可以保證返回結(jié)果的唯一性(可重入性)
函數(shù)的 可重入性(結(jié)果唯一性)
如果一個(gè)函數(shù)的輸入?yún)?shù)一定,則返回結(jié)果必須一定的函數(shù)稱(chēng)為可重入函數(shù)
【1】 可重入函數(shù),傳入?yún)?shù)一定.結(jié)果必然一定
def myadd(x, y):? return x + y?
【2】不可重入函數(shù):
y = 200? def myadd2(x):? return x + y? print(myadd2(10)) # 210? y = 300? print(myadd2(10)) # 310?
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python學(xué)習(xí)之名字,作用域,名字空間(下)
這篇文章主要介紹了Python學(xué)習(xí)之名字,作用域,名字空間,緊接上一篇文章內(nèi)容展開(kāi)全文,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助2022-05-05使用Python爬取小姐姐圖片(beautifulsoup法)
這篇文章主要介紹了Python爬取小姐姐圖片(beautifulsoup法),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02Python實(shí)現(xiàn)批量采集商品數(shù)據(jù)的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)批量采集商品的數(shù)據(jù),文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Django中的CACHE_BACKEND參數(shù)和站點(diǎn)級(jí)Cache設(shè)置
這篇文章主要介紹了Django中的CACHE_BACKEND參數(shù)和站點(diǎn)級(jí)Cache設(shè)置,Python是最具人氣的Python web框架,需要的朋友可以參考下2015-07-07python爬蟲(chóng)之requests庫(kù)的使用詳解
這篇文章主要為大家介紹了python爬蟲(chóng)之requests庫(kù)的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-11-11Django如何實(shí)現(xiàn)網(wǎng)站注冊(cè)用戶(hù)郵箱驗(yàn)證功能
這篇文章主要介紹了Django如何實(shí)現(xiàn)網(wǎng)站注冊(cè)用戶(hù)郵箱驗(yàn)證功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08