理解Python函數和方法


什么是函數?

       函數是抽象出的一組執行特定功能的重復代碼,通俗理解,就是對一些重復的工作進行封裝和然后直接調用,避免重復造輪子。


 

Python中的函數如何定義?

       使用def關鍵字,結構如下:

def 函數名(參數列表):
    函數體
    return語句(可省略)

  其中return 語句表示函數的結束,在函數內部return語句后的語句不會執行,return關鍵字后面客戶以跟變量,表達式等表示向函數調用方的返回值,也可以不加變量或者直接省略return語句,表示向函數調用方返回None對象。

函數如何調用?

  調用方法:函數名加括號,括號里傳入參數列表,如下所示:

def fun(a):
    print(a)



執行結果

>>> fun(3)
3


 

函數的參數有幾種類型?

  函數的參數按照傳入的要求和數量、類型的不同,一般分為以下幾種:

  1.位置參數(必選參數)

def fun(arg1,arg2,arg3):
    pass

  位置參數是最常見的參數類型,如上圖所示,arg1,arg2,arg3是三個位置參數,顧名思義,在調用時必須嚴格按照定義的位置順序傳入參數,否則會造成結果錯誤甚至報錯。

  2.默認參數

  如果某個參數的值大部分情況下都為某一特定的值,為調用方便,可為其設默認值,在調用時如果該參數取默認值,可不用傳入該參數,如下所示:

def fun(name,college="NEU"):
    print(name,"graduated from",college)
執行結果

>>> fun("I")
I graduated from NEU

    注意:

    函數定義時,默認參數必須在必須參數(沒有默認值的)之后,

    默認參數必須指向不可變對象(即為其賦的值必須是不可變對象),才可保證每次執行時默認參數的值相同。

    默認參數可以簡化函數的調用,也可提高函數更新(增加新參數)后的向下兼容性,即為新增加的參數設置默認值從而不用改寫原來函數的調用方式。

    3.可變參數

  "可變”指的是傳入的參數個數可變,可變參數在定義時使用"    *args     "(args可改為任意變量名),調用時可傳入任意數量的參數,會自動組裝成元組,由args變量名指向。如下所示:

def fun(*args):
    print(agrs)

執行結果
>>> fun(1,2,3)
(1, 2, 3) 

  4.關鍵字參數

  所謂關鍵字參數,即為在傳入時必須指明參數名和參數值,即以“參數名=值 ”的形式傳入參數

  和可變參數類似,關鍵字參數支持傳入任意個數的參數,區別是傳入的必須是關鍵字參數,在執行時於自動將傳入的關鍵字參數組裝成字典,關鍵字參數在定義時使用" **kwargs " 亦可換成其他變量名,指向組裝好的字典),如下所示:

def fun(**kwargs):
    print(kwargs)


執行結果
>>> fun(a=1,b=2)
{'a': 1, 'b': 2}

  5.命名關鍵字參數

  關鍵字參數不會限制關鍵字參數的名字,不利於參數名的檢查,命名關鍵字能指定傳入的關鍵字參數的名稱,如果傳入得關鍵字參數名稱不符,將會報錯。和關鍵字參數**kw不同,命名關鍵字參數需要一個特殊分隔符**后面的參數被視為命名關鍵字參數。定義的格式為“*,參數名1,參數名2“。如下所示:

def fun(*,a,b):
    print("success")

    
>>> fun()
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    fun()
TypeError: fun() missing 2 required keyword-only arguments: 'a' and 'b'
>>> fun(a=1)
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    fun(a=1)
TypeError: fun() missing 1 required keyword-only argument: 'b'
>>> fun(a=1,b=2)
success

    如果函數定義中已經有了一個可變參數,后面跟着的命名關鍵字參數就不再需要一個特殊分隔符*了(命名關鍵字在定義時亦可設默認值):

def person(name, age, *args, city, job="SE"):
    print(name, age, args, city, job)

 以上幾種參數在函數定義時,按何種順序?

  參數定義的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。


 

 函數和方法的區別?

  函數和方法本質上沒有不同,一般來說類中定義的函數叫方法,其他情況下都叫函數。


免責聲明!

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



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