1. 程式人生 > >二、函式基礎

二、函式基礎

一、函式分類

  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 存放字典形式的引數

def
foo(x,y,*args): print(x,y) print(args) print(foo(1,2,3,4,5)) 執行結果: 1,23,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'}