Python入門-函數(shù)

函數(shù)

定義:完成特定功能的語句組榜旦,可以給這組語句取一個名字,作為一個單位使用景殷。

函數(shù)優(yōu)點

???????? 實現(xiàn)代碼復用溅呢,提高開發(fā)效率澡屡,減少重復編碼。

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

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

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


函數(shù)定義

def funcname(params):

???????? xxx

???????? xxx

???????? return? xxx

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


匿名函數(shù)

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

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


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

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

f(2,2) = 4

f(2) = 8



參數(shù)傳遞

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

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

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

函數(shù)定義時如果指定默認值參數(shù)八秃,這類參數(shù)必須放在無默認值參數(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ù)是以形參名為標志符的元組,元組中的元素個數(shù)可以是零個骤肛、一個或多個纳本。

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


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

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

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

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


調(diào)用函數(shù)時淑玫,首先按位置順序傳遞參數(shù)巾腕,其次按關鍵字傳遞參數(shù)。多余的非關鍵字參數(shù)傳遞給元組絮蒿,多余的關鍵字參數(shù)傳遞給字典尊搬。


函數(shù)返回值

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

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

當有多條return語句時茵肃,執(zhí)行第一條return語句就會退出函數(shù)验残,不再執(zhí)行return后面的語句。

如果函數(shù)沒有return語句鸟召,自動返回None欧募,表示沒有返回值。

return語句可以返回多個值种冬,此時實際上返回的是一個元組對象娱两。


變量作用域

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

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

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


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

dir函數(shù)

???????? 返回由給定模塊迹冤、類、實例橱鹏,或其他類型的所有成員組成的列表莉兰,在交互式python解釋器下很有用糖荒,也可以用在其他地方模捂。

help函數(shù)

???????? 啟動內(nèi)置的幫助系統(tǒng)(此函數(shù)主要在交互式中使用)。如果沒有實參综看,解釋器控制臺里會啟動交互式幫助系統(tǒng)红碑。如果實參是一個字符串,則在模塊羡鸥、函數(shù)兄春、類、方法哑姚、關鍵字或文檔主題中搜索該字符串叙量,并在控制臺上打印幫助信息。如果實參是其他任意對象寺鸥,則會生成該對象的幫助頁胆建。

open函數(shù)

???????? 打開file 并返回對應的file object笆载。如果該文件不能打開涯呻,則觸發(fā)OSError复罐。

len函數(shù)

???????? 返回對象的長度(元素個數(shù))。實參可以是序列(如 string胀滚、bytes、tuple咙好、list 或 range 等)或集合(如 dictionary勾效、set 或 frozen set 等)层宫。

sum(iterable[,start])

???????? 從start 開始自左向右對iterable 中的項求和并返回總計值其监。start 默認為0抖苦。iterable 的項通常為數(shù)字,開始值則不允許為字符串贮庞。

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

???????? 根據(jù)iterable 中的項返回一個新的已排序列表窗慎。

???????? 具有兩個可選參數(shù)遮斥,它們都必須指定為關鍵字參數(shù)术吗。

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

???????? reverse 為一個布爾值末贾。如果設為True拱撵,則每個列表元素將按反向順序比較進行排序。

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

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

filter(function,iterable)

???????? 用iterable 中函數(shù)function 返回真的那些元素,構(gòu)建一個新的迭代器盅惜。iterable 可以是一個序列抒寂,一個支持迭代的容器蓬推,或一個迭代器沸伏。如果function 是None 毅糟,則會假設它是一個身份函數(shù)澜公,即iterable 中所有返回假的元素會被移除坟乾。

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

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

???????? 返回可迭代對象中最大的元素,或者返回兩個及以上實參中最大的明吩。

???????? 如果只提供了一個位置參數(shù)印荔,它必須是非空iterable,返回可迭代對象中最大的元素嘿悬;如果提供了兩個及以上的位置參數(shù)善涨,則返回最大的位置參數(shù)茶行。

???????? 有兩個可選只能用關鍵字的實參畔师。key 實參指定排序函數(shù)用的參數(shù),如傳給list.sort()的姿锭。default 實參是當可迭代對象為空時返回的值呻此。如果可迭代對象為空焚鲜,并且沒有給default 放前,則會觸發(fā)ValueError凭语。

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

map(function,iterable,...)

???????? 返回一個將function 應用于iterable 中每一項并輸出其結(jié)果的迭代器豪墅。如果傳入了額外的iterable 參數(shù)但校,function 必須接受相同個數(shù)的實參并被應用于從所有可迭代對象中并行獲取的項啡氢。當有多個可迭代對象時,最短的可迭代對象耗盡則整個迭代就將結(jié)束亭枷。

range(stop)

range(start,stop[,step])

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

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

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

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

???????? range類型相比常規(guī)list或tuple的優(yōu)勢在于一個range對象總是占用固定數(shù)量的(較型锌)內(nèi)存厚棵,不論其所表示的范圍有多大(因為它只保存了start,stop和step 值,并會根據(jù)需要計算具體單項或子范圍的值)狠轻。

enumerate(iterable,start=0)

???????? 返回一個枚舉對象彬犯。iterable 必須是一個序列谐区,或iterator,或其他支持迭代的對象昭抒。enumerate()返回的迭代器的__next__()方法返回一個元組虚茶,里面包含一個計數(shù)值(從start 開始,默認為 0)和通過迭代iterable 獲得的值婆殿。

input([prompt])

???????? 如果存在prompt 實參婆芦,則將其寫入標準輸出喂饥,末尾不帶換行符员帮。接下來,該函數(shù)從輸入中讀取一行氯材,將其轉(zhuǎn)換為字符串(除了末尾的換行符)并返回氢哮。

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

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

???????? 所有非關鍵字參數(shù)都會被轉(zhuǎn)換為字符串捉兴,就像是執(zhí)行了 str() 一樣倍啥,并會被寫入到流,以sep 且在末尾加上end始藕。sepend 都必須為字符串伍派;它們也可以為None剩胁,這意味著使用默認值。如果沒有給出objects晾腔,則 print() 將只寫入end啊犬。

???????? file 參數(shù)必須是一個具有write(string) 方法的對象;如果參數(shù)不存在或為None剔应,則將使用 sys.stdout峻贮。 由于要打印的參數(shù)會被轉(zhuǎn)換為文本字符串,因此 print() 不能用于二進制模式的文件對象何恶。對于這些對象,應改用file.write(...)唬涧。

???????? 輸出是否被緩存通常決定于file碎节,但如果flush 關鍵字參數(shù)為真值狮荔,流會被強制刷新殖氏。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雅采,一起剝皮案震驚了整個濱河市慨亲,隨后出現(xiàn)的幾起案子巴刻,更是在濱河造成了極大的恐慌冈涧,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異愚隧,居然都是意外死亡锻全,警方通過查閱死者的電腦和手機鳄厌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泪漂,“玉大人萝勤,你說我怎么就攤上這事∩魇剑” “怎么了瘪吏?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舵抹。 經(jīng)常有香客問我肪虎,道長,這世上最難降的妖魔是什么惧蛹? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任扇救,我火速辦了婚禮,結(jié)果婚禮上香嗓,老公的妹妹穿的比我還像新娘迅腔。我一直安慰自己,他們只是感情好靠娱,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布沧烈。 她就那樣靜靜地躺著,像睡著了一般像云。 火紅的嫁衣襯著肌膚如雪迅诬。 梳的紋絲不亂的頭發(fā)上惩歉,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天争涌,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛壹瘟,可吹牛的內(nèi)容都是我干的雕凹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逼泣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痹筛?” 一聲冷哼從身側(cè)響起床佳,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后莱革,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡赏半,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了光坝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸳惯。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖独悴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布捐顷,位于F島的核電站徽龟,受9級特大地震影響极颓,放射性物質(zhì)發(fā)生泄漏躯肌。R本人自食惡果不足惜校仑,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一尘吗、第九天 我趴在偏房一處隱蔽的房頂上張望擒贸。 院中可真熱鬧险绘,春花似錦渺氧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谋旦。三九已至乞巧,卻和暖如春囤热,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留择吊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像芍阎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容