Python之自定義函式
阿新 • • 發佈:2020-07-22
函式
1、定義函式
在Python中定義一個函式要使用def語句,一次寫出函式名、括號、括號中的的引數和冒號,然後在縮排塊中編寫函式體,函式的返回值用return返回。如下所示:
def 函式名(引數列表):
函式體
簡單的定義一個函式
1 def hello() : 2 print("Hello World!") 3 hello()
Hello World!
定義一個帶引數的函式:
需求:替換列表中的某個值替換成另一個值
l=[3,3,4,5,6,6,5,3,6,2,9,9,2,8,2,3]
i=0 while i<len(l): if l[i]==3:#把l中的3換成7l[i]=7 i+=1
l
[7, 7, 4, 5, 6, 6, 5, 7, 6, 2, 9, 9, 2, 8, 2, 7]
由上可知迴圈不能反覆利用,而且引數固定,所以我們可以定義一個函式。
1 def list_element_replace(somelist,x,y): 2 i=0 3 while i<len(l): 4 if l[i]==x:#丟棄值 5 l[i]=y#代替值 6 i+=1 7 return somelist
1 l=[1,2,3,4,1,2,3,1,4,5,2,3]2 list_element_replace(l,3,30)
[1, 2, 30, 4, 1, 2, 30, 1, 4, 5, 2, 30]
用for迴圈來編寫
1 def replace_element(a,b,c): 2 for i in range(len(a)): 3 if a[i]==b: 4 a[i]=c 5 return a
1 replace_element(l,2,20)
[1, 20, 30, 4, 1, 20, 30, 1, 4, 5, 20, 30]
2、函式的引數
2-1、位置引數
按照從左到右的順序依次定義的引數叫做位置引數;
1def student(age,high,sex): 2 if age<18: 3 print(age) 4 print(high) 5 print(sex) 6 else: 7 print("超出年齡"
1 student(19,170,"女")
超出年齡
1 student(16,170,"女")
16 170 女
由上面函式可知道,位置引數的順序是不能改變的,否則傳入引數是會錯誤識別。其實在傳引數時我們也能顯示的表示這些引數,即下面的關鍵字引數。
2-2、關鍵字引數與預設引數
•關鍵字引數:按照關鍵字進行傳參的引數,按照名稱-值對的形式進行傳參的引數;關鍵字引數可以不按引數的順序進行傳值;
1 def student(age,high,sex): 2 if age<18: 3 print(age) 4 print(high) 5 print(sex) 6 else: 7 print("超出年齡")
student(sex="男",age=17,high=178)#當我們顯示的把這些引數傳進來時無關順序
17 178 男
•預設引數:在函式定義階段就定義好預設值的引數;傳參時,如果不傳入具體的值,則使用定義時的值;
1 def student(age,high,sex="女"): 2 if age<18: 3 print(age) 4 print(high) 5 print(sex) 6 else: 7 print("超出年齡")
student(16,178)#在傳參時若某引數與預設引數一致則可省略
16 178 女
student(16,178,"男")#若不一致則傳入實際的值即可
16 178 男
2-3、不定長引數
有時我們定義函式是並不知道需要多少引數,這些引數叫做不定長引數。通常有兩種方法*args,**kwargs。
加了星號*的引數會以元組(tuple)的形式匯入,存放所有未命名的變數引數。
1 def scores(a,*x): 2 print(a) 3 print(x)
1 cores("姓名",80,79,88)
姓名
(80 79 88)
編寫求一串數的總和的函式
1 def sum_element(*x): 2 s=0 3 for i in x: 4 s=s+i 5 print(s)
1 sum_element(1,2,3,4)
10
當傳入的引數是列表或元組等一些集合時,我們可在引數前加*將其拆開。(定義函式特有的用法)
1 t=(1,3,5,7) 2 sum_element(*t)
16
加了兩個星號**的引數會以字典的形式匯入。
1 def scores(a,**x): 2 print(a) 3 print(x)
1 scores("姓名",b=98,c=109,d=110)
姓名 {'b': 98, 'c': 109, 'd': 110}
直接傳入字典
1 dict1={'b': 98, 'c': 109, 'd': 110} 2 def scores(a,**x): 3 print(a) 4 print(x)
scores("姓名",**dict1)#用**對字典進行拆包
姓名 {'b': 98, 'c': 109, 'd': 110}
注:編寫函式是引數是遵循一定的順序的:位置引數>關鍵字引數/預設引數>不定長引數(*args/**kwargs)