python 笔记:函数
1?空函數(shù)
如果想定義一個啥都不做的空函數(shù),可以用pass語句
因為python沒有;,所以if語句如果沒有內(nèi)容的話,用pass語句
2?函數(shù)的返回值
函數(shù)可以返回多個值(相當(dāng)于返回一個tuple——)
3 函數(shù)的形參
3.1 默認(rèn)值
對于函數(shù)形參,可以自動設(shè)置默認(rèn)值(默認(rèn)參數(shù)要在最后面)
3.2 可變參數(shù)
以一個*開頭的就是可變參數(shù)
可變參數(shù)在函數(shù)定義中不能出現(xiàn)在特定參數(shù)和默認(rèn)參數(shù)前面,因為可變參數(shù)會吞噬掉這些參數(shù)。
調(diào)用函數(shù)?report('Mike', 8, 9),輸出的結(jié)果為?Mike total grade is 17
調(diào)用函數(shù)?report('Mike', 8, 9, 10),輸出的結(jié)果為?Mike total grade is 27
3.3 關(guān)鍵字參數(shù)
以兩個*開頭的參數(shù)就是關(guān)鍵字參數(shù)
關(guān)鍵字參數(shù)可以傳入0個或者任意個含參數(shù)名的參數(shù),這些參數(shù)名在函數(shù)定義中并沒有出現(xiàn),這些參數(shù)在函數(shù)內(nèi)部自動封裝成一個字典(dict).
通過可變參數(shù)和關(guān)鍵字參數(shù),任何函數(shù)都可以用?universal_func(*args, **kw)?表達(dá)。
4 global
Python中定義函數(shù)時,若想在函數(shù)內(nèi)部對函數(shù)外的變量進(jìn)行操作,就需要在函數(shù)內(nèi)部聲明其為global。
不加global這個修飾詞的時候,作用域僅僅為func()的內(nèi)部,加了之后,作用域為全局
? ? ? ? ? ? ? ? ?VS? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ?VS? ? ? ? ? ? ? ? ? ? ?
如果局部要對全局變量修改,而不使用global關(guān)鍵字,那么會報錯
如果局部不聲明全局變量,并且不修改全局變量,則可以正常使用
5 nonlocal
nonlocal聲明的變量不是局部變量,也不是全局變量,而是外部嵌套函數(shù)內(nèi)的變量。
6 yield
帶yield的函數(shù)是一個生成器,而不是一個函數(shù)了。
這個生成器有一個函數(shù)就是next函數(shù),next就相當(dāng)于“下一步”生成哪個數(shù)。
這一次的next開始的地方是接著上一次的next停止的地方執(zhí)行的,所以調(diào)用next的時候,生成器并不會從foo函數(shù)的開始執(zhí)行,只是接著上一步停止的地方開始,然后遇到y(tǒng)ield后,return出要生成的數(shù),此步就結(jié)束。
輸出如下:
解釋:
1.程序開始執(zhí)行以后,因為foo函數(shù)中有yield關(guān)鍵字,所以foo函數(shù)并不會真的執(zhí)行,而是先得到一個生成器g(相當(dāng)于一個對象)
2.直到調(diào)用next方法時,foo函數(shù)正式開始執(zhí)行,先執(zhí)行foo函數(shù)中的print方法,然后進(jìn)入while循環(huán)
3.程序遇到y(tǒng)ield關(guān)鍵字,把yield想象成return,return了一個4之后,程序停止。并沒有執(zhí)行賦值給res操作,此時next(g)語句執(zhí)行完成,所以輸出的前兩行(第一個是while上面一行的print的結(jié)果,第二個是‘return’出的結(jié)果)是執(zhí)行print(next(g))的結(jié)果。
4.程序執(zhí)行print("*"*20),輸出20個*
5.又開始執(zhí)行下面的print(next(g)),這個時候和上面那個差不多,不過不同的是,這個時候是從剛才那個next程序停止的地方開始執(zhí)行的,也就是要執(zhí)行res的賦值操作,這時候要注意,這個時候賦值操作的右邊是沒有值的(因為剛才那個是return出去了,并沒有給賦值操作的左邊傳參數(shù)),所以這個時候res賦值是None,所以接著下面的輸出就是res:None,
6.程序會繼續(xù)在while里執(zhí)行,又一次碰到y(tǒng)ield,這個時候同樣return 出4,然后程序停止,print函數(shù)輸出的4就是這次‘return’出的4.
7?Lambda函數(shù)
lambda函數(shù)包含的表達(dá)式不能超過
lambda函數(shù)的格式:冒號前面的是參數(shù),可以有多個,有逗號隔開來,冒號右邊的是表達(dá)式
函數(shù)名 = lambda 參數(shù)列表 : 表達(dá)式
lambda函數(shù)的返回值是一個函數(shù)的地址(函數(shù)對象)?
7.1 lambda 函數(shù)應(yīng)用場景
filter,map,reduce,列表的sort等等
7.1.1 sort
?7.1.2 map
7.1.3 filter
總結(jié)
以上是生活随笔為你收集整理的python 笔记:函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文巾解题 1877. 数组中最大数对和的
- 下一篇: python笔记: 生成器