一輛車幫你讀懂python函式

新夢想IT發表於2023-02-09



函式的概念:

有一個超市,a要去買西,走一段距離,b去買東西走一段距離,c去買東西也走一段距離,於是就有了公交車,abc都可以搭這一趟公交車去超市買東西,這裡的公交車就是函式。函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼段。




函式的作用:


後面超市所在的位置擴建,有了菜市場、公園,相應的公交車把站臺調整一下即可達到目的地。這樣就在節約了人力做重複工作的同時還可以因為擴建而自由的調整公交站線路,這就是在函式裡體現的作用----方便擴充套件、節約程式碼、提高程式碼複用性




函式的定義:


def function(params):

block return expression/value




(1)在Python中採用def(define)關鍵字進行函式的定義,不用指定返回值的型別。

(2)函式引數params可以是零個、一個或者多個,同樣的,函式引數也不用指定引數型別,因為在Python中變數都是弱型別的,Python會自動根據值來維護其型別。

(3)return語句是可選的,它可以在函式體內任何地方出現,表示函式呼叫執行到此結束;如果沒有return語句,會自動返回NONE,如果有return語句,但是return後面沒有接表示式或者值的話也是返回NONE。



呼叫函式語法:


函式名(引數列)



舉例:

def printme():

    '''函式體只用來實現列印語句'''

    print("Hello")

    

printme()       #函式的呼叫 


輸出:

Hello



函式中的相關概念:


形參、實參:


公交車裡有老弱病殘孕的專坐,有司機專用座,這些在形式上的一個安排,這些坐位就是函式中的形式引數,簡稱形參;具體坐什麼人在函式中叫實際引數,並不是所有坐在這些坐位上的都是老弱病殘,具體要看實際所坐的是什麼人。


-----函式後面跟的是形參;實際傳的是實參




舉例:


def add(a,b):       #a、b是形參

    '''函式體用來實現兩位數的加法'''

    return a+b


print(add(1,5))      #實參



值傳遞、引用傳遞:


搭車買票有兩種方式,一種人工售票,上車前買好票,然後拿著票上車,不管上車後是剪票還是收費的形式,這個票跟物件(上車的人)所擁有的錢或是其它都沒關係,這是值傳遞;另一種買票方式就是直接刷卡,根據車費的金額直接刷卡,這個刷卡會直接影響卡上的餘額,這種就是引用傳遞;

------傳遞修改值不影響本身物件的值;引用傳遞修改就是修改本身的值



舉例1:


def changenum(numa):

    '''值傳遞:傳遞的是另一個複製的物件,不會影響本物件的值'''

    numa = 20

numb = 10

changenum(numb);

print(numb)


輸出

10


舉例2:

def changenum1(list1):

    '''引用傳遞:傳遞的是指向物件的地址,修改會影響物件的值'''

    list1.append(0)


list2 = [1,2,6,8]

changenum1(list2)

print(list2)


輸出

10

[1, 2, 6, 8, 0]


函式的引數型別:


必備型別


不管是公交車還是其它車,車上的每個零件都有自己的作用,假設一個坐位需要大小不一的4個螺絲來固定,如果只擰3個(必須按傳指定引數的個數)或沒有按指定大小(按順序傳參)擰螺絲,那麼坐位必然就會有倒的風險。

-----這種引數透過位置、依次進行匹配的型別叫必備型別



舉例:


def printMe(name,age):

    '''必備型別:引數個數與位置都嚴格匹配'''

    print("我叫"+name+",我今年"+str(age)+'歲')


printMe('newdream',19)


輸出

我叫newdream,我今年19歲


關鍵字型別

領匯出席活動都有陪同一起,出席時,要麼就按順序先站好再入場就坐(不按關鍵字,按順序),要麼就直接入場後按名字進行就坐(按關鍵字指定引數)

-----用引數的命名確定傳入的引數值,Python直譯器能夠用引數名匹配引數值



舉例:


def printMe(name,age):

    '''關鍵字型別,一般都指定關鍵字(不指定關鍵字也允許)'''

    print("我叫"+name+",age的值是"+str(age))


printMe('newdream',7)               #不指定關鍵字

printMe(name = 'newdream',age = 7)    #指定關鍵字




輸出

我叫newdream,age的值是7

我叫newdream,age的值是7


3.不定長型別

大巴士的坐位是固定的,如果趕上春運那麼以往的班次是遠遠不能滿足客運量的,於是就允許在過道上新增一些板凳充當臨時坐位,這樣就可以一次性上更多的旅客(可以一次性傳多個引數),而不用增加班車的次數(不用重新再定義函式)。

-----’*‘ 和’ ** ‘表示能夠接受0到任意多個引數,’ * '表示將沒有匹配的值都放在同一個元組中; ’ ** '表示將沒有匹配的值都放在一個dictionary中。



舉例1:


def busCustomer1(a,*args):

    '''不定長型別:允許一次性傳一個或多個的引數型別

    *:將沒有匹配的引數放到一個元組中

    '''

    print("第一個引數是",a)

    for i in args:

        print(i,end=' ')

busCustomer1(16)

busCustomer1(1,5,7,9,2,'a',True)


輸出

第一個引數是 16

第一個引數是 1

5 7 9 2 a True 


舉例2:

def busCustomer2(a,**args):

    '''不定長型別:允許一次性傳一個或多個的引數型別

    **:將沒有匹配的引數放到一個字典中'''

    print("第一個引數是",a)

    for i in args:

        print("%s %s"%(i,args[i]))

busCustomer2(1,a1='a',a2='c')


輸出

第一個引數是 1

a1 a

a2 c


4.預設型別

搭公交車,會買票,中途N個站,可以自由選擇下車站點(可以選擇傳參),如果搭過頭了或是忘記下車了,就終點站下(引數的預設值)

------預設引數的值如果沒有傳入,則被認為是預設值。且需注意的是,預設值引數應該放在引數的最後一個



舉例:


def defaultArgu(name,age = 19):

    '''預設型別:當沒有傳參時取預設值,傳參了則以引數的值為準

    '''

    print("我叫"+name+",今年"+str(age))


defaultArgu('newdream')

defaultArgu('newdream',25)


輸出

我叫newdream,今年19

我叫newdream,今年25


匿名函式型別

如果說函式是公交車,那麼匿名函式就是一輛腳踏車,在構造上(函式的定義)與功能上(只能是一個表示式)要單一的多

----使用 lambda 來建立匿名函式。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69940641/viewspace-2934590/,如需轉載,請註明出處,否則將追究法律責任。

相關文章