Python入門-函數(shù)

函數(shù)

定義:完成特定功能的語句組,可以給這組語句取一個(gè)名字,作為一個(gè)單位使用。

函數(shù)優(yōu)點(diǎn)

???????? 實(shí)現(xiàn)代碼復(fù)用,提高開發(fā)效率,減少重復(fù)編碼。

???????? 簡(jiǎn)化程序結(jié)構(gòu),將復(fù)雜的編程問題分解為若干簡(jiǎn)單的子問題,每個(gè)子問題由函數(shù)來解決。????

???????? 使用函數(shù)可以使程序更容易閱讀;使調(diào)試測(cè)試更容易。

???????? 信息封裝與隱藏。


函數(shù)定義

def funcname(params):

???????? xxx

???????? xxx

???????? return? xxx

函數(shù)名、參數(shù)、函數(shù)體


匿名函數(shù)

f = lambda 參數(shù)1, 參數(shù)2, ... :表達(dá)式

f = lambda x,y,z : x+y+z

g = lambda x: lambda y : x+y


>>>f=lambda x,y,z:x+y+z

>>>f(5,10,15)

30

?

>>>g=lambda x:lambda y:x+y

>>>g(5)(10)

15


帶默認(rèn)參數(shù)值的匿名函數(shù)

f = lambda x,y=3 : x**y

f(2,2) = 4

f(2) = 8



參數(shù)傳遞

1 按照位置傳參數(shù)

2 按照關(guān)鍵字傳參數(shù)

3 按照默認(rèn)值傳參數(shù)

函數(shù)定義時(shí)如果指定默認(rèn)值參數(shù),這類參數(shù)必須放在無默認(rèn)值參數(shù)的后面。


def sum(a,b,c=10)

???????? return a+b+c


sum1 = sum(4,5,6)

sum2 = sum(a=4,c=8,b=6)


可變數(shù)量的參數(shù)定義

定義函數(shù)時(shí),如果參數(shù)數(shù)量不確定,可以定義可變數(shù)量的參數(shù)。

參數(shù)名前面加一個(gè)'*'表示參數(shù)是以形參名為標(biāo)志符的元組,元組中的元素個(gè)數(shù)可以是零個(gè)、一個(gè)或多個(gè)。

參數(shù)名前加兩個(gè)'*'表示參數(shù)數(shù)據(jù)類型是字典,其中參數(shù)名為“key”,參數(shù)值為“value”


定義函數(shù)時(shí),可以混合使用多種參數(shù)傳遞方式,要遵循如下規(guī)則:

1 關(guān)鍵字參數(shù)放在位置參數(shù)后面

2 元組參數(shù)放在關(guān)鍵字參數(shù)后面

3 字典參數(shù)放在元組參數(shù)后面


調(diào)用函數(shù)時(shí),首先按位置順序傳遞參數(shù),其次按關(guān)鍵字傳遞參數(shù)。多余的非關(guān)鍵字參數(shù)傳遞給元組,多余的關(guān)鍵字參數(shù)傳遞給字典。


函數(shù)返回值

函數(shù)定義中,return語句是可選項(xiàng),主要功能是返回函數(shù)執(zhí)行結(jié)果。

返回的數(shù)據(jù)類型除常見的數(shù)值,字符串,還可以是布爾值、列表對(duì)象等。

當(dāng)有多條return語句時(shí),執(zhí)行第一條return語句就會(huì)退出函數(shù),不再執(zhí)行return后面的語句。

如果函數(shù)沒有return語句,自動(dòng)返回None,表示沒有返回值。

return語句可以返回多個(gè)值,此時(shí)實(shí)際上返回的是一個(gè)元組對(duì)象。


變量作用域

函數(shù)內(nèi)部創(chuàng)建的對(duì)象只能在函數(shù)內(nèi)部訪問,這種變量稱為局部變量。

函數(shù)外部定義的變量可以被程序的任何部分訪問,這種變量稱為全局變量。

Python3中全局變量在函數(shù)內(nèi)訪問時(shí)需要用global指明是訪問全局變量。


常用內(nèi)建函數(shù)

dir函數(shù)

???????? 返回由給定模塊、類、實(shí)例,或其他類型的所有成員組成的列表,在交互式python解釋器下很有用,也可以用在其他地方。

help函數(shù)

???????? 啟動(dòng)內(nèi)置的幫助系統(tǒng)(此函數(shù)主要在交互式中使用)。如果沒有實(shí)參,解釋器控制臺(tái)里會(huì)啟動(dòng)交互式幫助系統(tǒng)。如果實(shí)參是一個(gè)字符串,則在模塊、函數(shù)、類、方法、關(guān)鍵字或文檔主題中搜索該字符串,并在控制臺(tái)上打印幫助信息。如果實(shí)參是其他任意對(duì)象,則會(huì)生成該對(duì)象的幫助頁。

open函數(shù)

???????? 打開file 并返回對(duì)應(yīng)的file object。如果該文件不能打開,則觸發(fā)OSError。

len函數(shù)

???????? 返回對(duì)象的長(zhǎng)度(元素個(gè)數(shù))。實(shí)參可以是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)。

sum(iterable[,start])

???????? 從start 開始自左向右對(duì)iterable 中的項(xiàng)求和并返回總計(jì)值。start 默認(rèn)為0。iterable 的項(xiàng)通常為數(shù)字,開始值則不允許為字符串。

sorted(iterable,*,key=None,reverse=False)

???????? 根據(jù)iterable 中的項(xiàng)返回一個(gè)新的已排序列表。

???????? 具有兩個(gè)可選參數(shù),它們都必須指定為關(guān)鍵字參數(shù)。

???????? key 指定帶有單個(gè)參數(shù)的函數(shù),用于從iterable 的每個(gè)元素中提取用于比較的鍵 (例如key=str.lower)。默認(rèn)值為None (直接比較元素)。

???????? reverse 為一個(gè)布爾值。如果設(shè)為True,則每個(gè)列表元素將按反向順序比較進(jìn)行排序。

???????? 使用functools.cmp_to_key()可將老式的cmp 函數(shù)轉(zhuǎn)換為key 函數(shù)。

???????? 內(nèi)置的sorted()確保是穩(wěn)定的。如果一個(gè)排序確保不會(huì)改變比較結(jié)果相等的元素的相對(duì)順序就稱其為穩(wěn)定的 --- 這有利于進(jìn)行多重排序(例如先按部門、再按薪級(jí)排序)。

filter(function,iterable)

???????? 用iterable 中函數(shù)function 返回真的那些元素,構(gòu)建一個(gè)新的迭代器。iterable 可以是一個(gè)序列,一個(gè)支持迭代的容器,或一個(gè)迭代器。如果function 是None ,則會(huì)假設(shè)它是一個(gè)身份函數(shù),即iterable 中所有返回假的元素會(huì)被移除。

max(iterable,*[,key,default])

max(arg1,arg2,*args[,key])

???????? 返回可迭代對(duì)象中最大的元素,或者返回兩個(gè)及以上實(shí)參中最大的。

???????? 如果只提供了一個(gè)位置參數(shù),它必須是非空iterable,返回可迭代對(duì)象中最大的元素;如果提供了兩個(gè)及以上的位置參數(shù),則返回最大的位置參數(shù)。

???????? 有兩個(gè)可選只能用關(guān)鍵字的實(shí)參。key 實(shí)參指定排序函數(shù)用的參數(shù),如傳給list.sort()的。default 實(shí)參是當(dāng)可迭代對(duì)象為空時(shí)返回的值。如果可迭代對(duì)象為空,并且沒有給default ,則會(huì)觸發(fā)ValueError

???????? 如果有多個(gè)最大元素,則此函數(shù)將返回第一個(gè)找到的。

map(function,iterable,...)

???????? 返回一個(gè)將function 應(yīng)用于iterable 中每一項(xiàng)并輸出其結(jié)果的迭代器。如果傳入了額外的iterable 參數(shù),function 必須接受相同個(gè)數(shù)的實(shí)參并被應(yīng)用于從所有可迭代對(duì)象中并行獲取的項(xiàng)。當(dāng)有多個(gè)可迭代對(duì)象時(shí),最短的可迭代對(duì)象耗盡則整個(gè)迭代就將結(jié)束。

range(stop)

range(start,stop[,step])

???????? 雖然被稱為函數(shù),但range實(shí)際上是一個(gè)不可變的序列類型,通常用于在for循環(huán)中循環(huán)指定的次數(shù)。

???????? range構(gòu)造器的參數(shù)必須為整數(shù)(可以是內(nèi)置的int或任何實(shí)現(xiàn)了__index__ 特殊方法的對(duì)象)。如果省略step 參數(shù),其默認(rèn)值為1。如果省略start 參數(shù),其默認(rèn)值為0,?????? 如果step 為零則會(huì)引發(fā)ValueError

???????? 如果step 為正值,確定 range r 內(nèi)容的公式為r[i] = start + step*i 其中i >= 0 且r[i] < stop。

???????? 如果step 為負(fù)值,確定 range 內(nèi)容的公式仍然為r[i] = start + step*i,但限制條件改為i >= 0 且r[i] >stop.

???????? range類型相比常規(guī)list或tuple的優(yōu)勢(shì)在于一個(gè)range對(duì)象總是占用固定數(shù)量的(較?。﹥?nèi)存,不論其所表示的范圍有多大(因?yàn)樗槐4媪藄tart,stop和step 值,并會(huì)根據(jù)需要計(jì)算具體單項(xiàng)或子范圍的值)。

enumerate(iterable,start=0)

???????? 返回一個(gè)枚舉對(duì)象。iterable 必須是一個(gè)序列,或iterator,或其他支持迭代的對(duì)象。enumerate()返回的迭代器的__next__()方法返回一個(gè)元組,里面包含一個(gè)計(jì)數(shù)值(從start 開始,默認(rèn)為 0)和通過迭代iterable 獲得的值。

input([prompt])

???????? 如果存在prompt 實(shí)參,則將其寫入標(biāo)準(zhǔn)輸出,末尾不帶換行符。接下來,該函數(shù)從輸入中讀取一行,將其轉(zhuǎn)換為字符串(除了末尾的換行符)并返回。

print(*objects,sep=' ',end='\n',file=sys.stdout,flush=False)

???????? 將objects 打印到file 指定的文本流,以sep 分隔并在末尾加上end。sep,end,fileflush 如果存在,它們必須以關(guān)鍵字參數(shù)的形式給出。

???????? 所有非關(guān)鍵字參數(shù)都會(huì)被轉(zhuǎn)換為字符串,就像是執(zhí)行了 str() 一樣,并會(huì)被寫入到流,以sep 且在末尾加上endsepend 都必須為字符串;它們也可以為None,這意味著使用默認(rèn)值。如果沒有給出objects,則 print() 將只寫入end。

???????? file 參數(shù)必須是一個(gè)具有write(string) 方法的對(duì)象;如果參數(shù)不存在或?yàn)镹one,則將使用 sys.stdout。 由于要打印的參數(shù)會(huì)被轉(zhuǎn)換為文本字符串,因此 print() 不能用于二進(jìn)制模式的文件對(duì)象。對(duì)于這些對(duì)象,應(yīng)改用file.write(...)。

???????? 輸出是否被緩存通常決定于file,但如果flush 關(guān)鍵字參數(shù)為真值,流會(huì)被強(qiáng)制刷新。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容