python 函數進階筆記

函數的參數傳遞

1.必選參數

必選參數也叫位置參數,定義:就是在給函數傳參數時,按照順序,依次傳值。

舉一個簡單例子

def sum(a,b):
    return a+b
sum(2,3)

函數sum(a,b)中有兩個參數,a和b,這兩個參數都是位置參數,調用的時候,傳入的兩個值按照順序,依次賦值給a和b。

2.默認參數

定義:就是在寫函數的時候直接給參數傳默認的值,調用的時候,默認參數已經有值,就不用再傳值了。
作用:最大的好處就是降低調用函數的難度。也可以傳值給函數。但如果沒有傳參,一律採用的是默認值。

def sum_1(a,b=2):
    return a+b
sum_1(3)#調用函數,只傳入一個值,沒有傳進去的那個按默認值
#5
sum_1(3,3)#調用函數,傳入兩個值,都是按傳進去的值計算
#6
設置默認參數注意事項

第一:必選參數在前,默認參數在後,否則python解釋器會報錯。
第二:默認參數一定要指向不變對象!指向不變對象!指向不變對象!
(注意:python中的字符串,數字,元組都可以看做對象。)
爲什麼要設計str、None這樣的不變對象呢?因爲不變對象一旦創建,對象內部的數據就不能修改,這樣就減少了由於修改數據導致的錯誤。此外,由於對象不變,多任務環境下同時讀取對象不需要加鎖,同時讀一點問題都沒有。我們在編寫程序時,如果可以設計一個不變對象,那就儘量設計成不變對象

3.可變參數

簡單來說,就是沒有設置傳入參數的多少,可以傳進去多個值也可以一個值
表示方法: *arges

我們常用的求和函數就是這樣設置的。

def sum_2(*b):
    sum =0
    for i in b:
        sum +=i
    return sum
sum_2(1,2,3,4,5,6,7,8,9,10)
# 55

很多函數都用到了可變參數,比如max()和min()函數,這樣的很多,我們以後要記得設置函數可變參數記得用‘*’號來標記。

關鍵字參數(字典)

定義:可變參數允許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝爲一個tuple。
而關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個dict。在調用函數時,可以只傳入必選參數:
作用:擴展函數的功能
特徵:**kw

如果直接傳值給它會報錯,我們看下面一個例子。

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
person(2,3,x=3)
#name: 2 age: 3 other: {'x': 3}

多個參數結合的用法

在這裏插入圖片描述
這個圖片講解了常用的傳參和幾種參數結合,各種傳參方法可能出現的結果。
最後我們對函數參數進行一個總結

1,Python的函數具有非常靈活的參數形態,既可以實現簡單的調用,又可以傳入非常複雜的參數。

2,默認參數一定要用不可變對象,如果是可變對象,程序運行時會有邏輯錯誤!

3,要注意定義可變參數和關鍵字參數的語法:

*args是可變參數,args接收的是一個tuple;

**kw是關鍵字參數,kw接收的是一個dict。

4,以及調用函數時如何傳入可變參數和關鍵字參數的語法:

可變參數既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple,再通過args傳入:func((1, 2, 3));

關鍵字參數既可以直接傳入:func(a=1, b=2),又可以先組裝dict,再通過kw傳入:func({‘a’: 1, ‘b’:2})。

5,使用*args和**kw是Python的習慣寫法,當然也可以用其他參數名,但最好使用習慣用法。

6,命名的關鍵字參數是爲了限制調用者可以傳入的參數名,同時可以提供默認值。

函數文檔

這裏我借鑑老師的課件,有興趣的可以看一下,作爲一個程序員還是應該多寫註釋。
在這裏插入圖片描述
在這裏插入圖片描述

匿名函數

lambda表達式
1.lambda表達式可以用來聲明匿名函數,也就是沒有函數名字的臨時使用的小函數,尤其適合需要一個函數作爲另一個函數參數的場合。也可以定義具名函數。
2.lambda表達式只可以包含一個表達式,該表達式的計算結果可以看作是函數的返回值,不允許包含複合語句,但在表達式中可以調用其他函數。

在這裏插入圖片描述
下面我們來看幾個簡單例子
在這裏插入圖片描述
通過這幾個例子,我們也大致掌握了lambda函數的用法了。
最後讓我們看一下幾個常用的比較牛逼的函數。

常用複雜函數

1.range() 函數
語法我就不過多強調了,可以看一下這張圖片。
在這裏插入圖片描述
在這裏插入圖片描述
2.map()函數
map() 會根據提供的函數對指定序列做映射。
第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。
在這裏插入圖片描述
3.zip()函數
zip() 函數用於將可迭代的對象作爲參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的列表。
如果各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同,利用 * 號操作符,可以將元組解壓爲列表。
zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中爲了減少內存,zip() 返回的是一個對象。如需展示列表,需手動 list() 轉換。
在這裏插入圖片描述
4.enumerate函數
enumerate() 函數用於將一個可遍歷的數據對象(如列表、元組或字符串)組合爲一個索引序列,同時列出數據和數據下標,一般用在 for 循環當中。
在這裏插入圖片描述
5.reduce函數
reduce() 函數會對參數序列中元素進行累積。
函數將一個數據集合(鏈表,元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(有兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。

def add(x, y) :            # 兩數相加
   return x + y
reduce(add, [1,2,3,4,5])   # 計算列表和:1+2+3+4+5
15

6.filter函數

filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
該接收兩個參數,第一個爲函數,第二個爲序列,序列的每個元素作爲參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。
注意: Pyhton2.7 返回列表,Python3.x 返回迭代器對象。
在這裏插入圖片描述
這幾個函數大概就介紹這麼多了,有興趣的可以自己去網上看一下相關的資料。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章