Python之自定義函數


函數

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換成7
        l[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、位置參數
按照從左到右的順序依次定義的參數叫做位置參數;
1 def 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)

 

 

3、匿名函數lambda:

使用lambda關鍵字來創造匿名函數,lambda是一個表達式,也可以說是一個匿名函數。簡單來說可以認為是沒有名字的函數。

語法:
lambda 參數 : 返回值

 

1 def sq(x):
2     #....
3     #定義一個求x平方的函數
4     #....
5     return x*x
1 sq1=lambda x:x*x#簡單一條語句組成一個函數
1 sq(3)

 9

1 sq1(3)

9

 

lambda函數語法簡單明了,我們常常把匿名函數與循環語句或map()函數等配套使用起來非常方便。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM