chapter4.1、函數,參數
函數
y = f(x) y是x的函數,x自變量
python函數
由若幹的語句塊,函數名稱,參數列表構成,是組織代碼的最小單元
作用是完成一定的功能
函數的作用
結構化編程的最基本封裝,一般按照功能組織代碼
封裝為了復用,減少冗余代碼
代碼簡潔美觀,可讀易懂
def語句定義函數
def 函數名(參數列表) <--參數列表不是列表
函數體(代碼塊)
[return 返回值]
函數名就是標識符,命名要求一樣
語句塊縮進 四個空格
python的函數沒有return語句,返回None
定義的參數列表為形式參數,只是符號表達,簡稱形參,相當於占位符
調用
函數定義,只是聲明函數,需調用才能執行
調用的方式,就是函數加上小括號,括號內寫參數
調用的參數是實際參數,和形參位數相同
返回值也是值,None也是值,返回值可以用變量接收
定義要在調用前,否則NameError異常
callable測試是否是函數,測試時不要在函數名後加括號
print返回None,打印打印的話會返回None
函數的調用,輸入參數時,動態語言的缺點,不能指定類型,除了程序解決,沒有語法上的解決方案。
位置參數,一一對應,按照參數定義順序傳入
def f(x,y,z) 調用使用 f(1,3,5) 按照定義順序傳入參數
關鍵字參數,使用形參的名字傳參,可以與定義順序不同
def f(x,y,z) 調用使用 f(x=1,y=3,z=5)
傳參
f(z=None,y=10,x=[1]) f((1,),z=6,y=4.1)
實參:位置參數要在關鍵字參數之前,位置參數按位置對應
形參:非缺省參數要在缺省參數之前
參數默認值,缺省值
定義時,在形參後跟上一個值
作用
參數的默認值可以在未傳入足夠的實參時,對未定義的參數賦值為默認值
簡化函數調用
可變參數
def add(nums): sum = 0 for i in nums: sum += i return sum
傳入可叠代對象,叠代元素求和
一個形參可以匹配任意個參數
*可變位置參數,可以接收多個實參
使用*封裝成元組返回,收集的實參為一個tuple
空的返回空元組
**可變關鍵字參數
使用**符號,表示接受多個關鍵字參數
收集到的值和名稱封裝成字典dict
空的收集空字典
位置參數後放可變位置參數,再放keyword-only參數,最後邊只能放可變關鍵字參數
keyword-only參數,只能通過關鍵字傳參
在位置可變參數之後,出現參數,就不能在理解為位置參數,要理解為關鍵字參數
**kwargs只能在最後的位置
fn(*args,x,y),表示x,y是keyword-only參數,前邊收位置參數
fn(*,x,y) 表示只要keyword-only參數,必須有
參數列表的一般順序是,普通參數,缺省參數,可變位置參數,keyword-only參數(可帶缺省值),可變關鍵字參數
def fn (x,y,z=3,*arg,m=4,n,**kwargs)
註意
代碼應該易讀易懂,按照書寫習慣定義函數參數
解構
fn(*[4,5]) fn(*{4,5}) fn(*(4,5))
解開是fn(4,5)
*參數解構成位置參數,可以解開一層的結構,列表,元組,集合,字符串,字節,可以解開可叠代對象(range等)
add(**{‘x‘:2,‘y‘:4})
解開的參數是add(x=2,y=4)
**解開兩層,解開字典構成關鍵字參數,產生的鍵值對組成的元組。二維結構,返回兩層。
可變位置參數和參數解構要分清
chapter4.1、函數,參數