二、函式基礎
阿新 • • 發佈:2019-01-12
一、函式分類
1. 內建函式:
python直譯器已經定義好了的函式,拿來即用
2. 自定義函式:
def 函式名(引數1,引數2,引數3,...): '''註釋''' 函式體 return 返回的值
二、 自定義函式需先定義,再使用
函式定義後會檢測語法錯誤,邏輯錯誤只有被呼叫後才能檢測
三、 函式呼叫
1. 函式呼叫方式
函式名()
2. 函式返回值
沒有return------------>返回None
return1個值---------->返回一個值
return多個值--------->返回一個元組
3. 函式呼叫的三種形式
語句形式----------------------->foo()
表示式形式-------------------->6*len(x)
作為另一個函式的引數------>len(upper(x))
四、形參和實參
1. 形參即變數名
2. 實參即變數值
3. 位置引數
按照從左到右的順序定義的引數,實參在傳給形參時,也必須按照順序傳遞
def aaa(x,y,z) #計算3個引數的和 a=x+y+z return(a) res=aaa(1,2,3) #呼叫時1賦值給x,2賦值給y,3賦值給z
4. 關鍵字引數
按照x=2,y=3,z=4的形式給形參傳值
5. 預設引數
形參在定義時,已經給了一個引數,呼叫時,若不給這個引數賦值,則使用預設引數
6. 可變長引數
指實參的個數不固定
針對可變長引數,使用 *args 存放元組形式的引數, **kwargs 存放字典形式的引數
deffoo(x,y,*args): print(x,y) print(args) print(foo(1,2,3,4,5)) 執行結果: 1,2 (3,4,5) #元組形式傳入的實參 None #沒有定義函式返回值,預設返回None
def foo1(x,y,*args): print(args) print(len(args)) foo1(1,2,*(3,4,5)) #依次拿出元組(3,4,5)的元素,組成元組args的元素 執行 (3,4,5) 3
########## def foo(x,y,z): print(x,y,z) foo(*[1,2,3]) print(*[1,2,3]) 1 2 3 1 2 3
########## def foo(x,y,**kwargs): print(x,y) print(kwargs) foo(1,y=2,a=1,b=2,c=3) 1 2 {'b':2,'c':3,'a':1}
########## def foo(x,y,**kwargs): print(x,y) print(kwargs) foo(1,y=2,**{'a':1,'b':2,'c':3}) 1 2 {'b':2,'c':3,'a':1}
########## def foo(x,y,z): print(x,y,z) foo(**{'z':1,'x':2,'y':3}) 2 3 1
########## def foo(x,y): print(x,y) def wrapper(*args,**kwargs): print('====>') foo(*args,**kwargs) wrapper((66,77),{'a':1,'b':2,'c':3}) (66,77),{'a':1,'b':2,'c':3}
########## def aaa(*args,**kwargs): print(args) print(kwargs) print(len(args),len(kwargs)) aaa(*(66,77),**{'a':1,'b':2,'c':3}) #args=(66,77) kwargs={'a':1,'b':2,'c':3} aaa((66,77),{'a':1,'b':2,'c':3}) #args=(66,77),{'a':1,'b':2,'c':3} kwargs為空
########## def foo(x,y,*args,a=1,b,**kwargs): print(x,y) print(args) print(a) print(b) print(kwargs) foo(1,2,3,4,5,b=3,c=4,d=5) 1 2 (3, 4, 5) 1 3 {'c': 4, 'd': 5}
五、練習題
1、寫函式,計算傳入字串中【數字】、【字母】、【空格] 以及 【其他】的個數
def aaa(x): num=0 string=0 space=0 others=0 for i in x: if i.isdigit(): num+=1 elif i.isalpha(): string+=1 elif i.isspace(): space+=1 else: others+=1 print('%s這個字串中,有數字%s個,字母%s個,空格%s個,其他%s個'%(x,num,string,space,others)) aaa('dgajg sdjigaj s3438ng %%#%')
2、 寫函式,判斷使用者傳入的物件(字串、列表、元組)長度是否大於5
def aaa(x): if len(x)>5: print('%s的長度大於5,長度為%s'%(x,len(x))) else: print('%s的長度不大於5,長度為%s'%(x,len(x))) aaa((1,2,3,4,5,6,7)) aaa([1,2,3,4,5,6,7]) aaa('sfhusgange')
(1,2,3,4,5,6,7)的長度大於5,長度為7
[1,2,3,4,5,6,7]的長度大於5,長度為7
sfhusgange的長度大於5,長度為10
3、 寫函式,檢查傳入列表的長度,如果大於2,那麼僅保留前兩個長度的內容,並將新內容返回給呼叫者
def aaa(x): if len(x)>2: x=x[0:2] print(x) return(x) aaa(['aaa']) aaa(['aaa','bbb','ccc','ddd']) ['aaa'] ['aaa','bbb']
4、寫函式,檢查獲取傳入列表或元組物件的所有奇數位索引對應的元素,並將其作為新列表返回給呼叫者
def aaa(x): return x[1::2] print(aaa([1,2,3,4,5,6,7,8,9]))
5、寫函式,檢查字典的每一個value的長度,如果大於2,那麼僅保留前兩個長度的內容,並將新內容返回給呼叫者
def aaa(x): d={} for k,v in x.items(): if len(v)>2: d[k]=v[0:2] else: d[k]=v return d print(aaa({'k1':'abcdef','k2':[1,2,3,4],'k3':('a','b','c'),'k4':'a'})) {'k1':'ab','k2':[1,2],'k3':('a','b'),'k4':'a'}