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