Python中函數的參數-arguments

來源:互聯網
上載者:User

標籤:arguments   div   TE   code   nal   調用函數   AC   key   name   

歸納起來,Python中函數的定義形式和調用形式主要有如下幾種形式:

# 函數的定義形式def func(name)               # 匹配positional參數或者keyword參數def func(name=value)    # 如果不傳,有預設參數def func(*name)        # 將額外的positional參數轉換成一個tuple,然後賦給namedef func(**name)     # 將額外的keyword參數轉換成一個dictionary,然後賦給namedef func(*other, name)  # Python 3.X中定義keyword-only參數的形式,Python 2.X中不支援,此時,name一定要以keyword的形式傳遞def func(*, name)     # Python 3.X中定義keyword-only參數的形式, Python 2.X中不支援,此時, name一定要以keyword的形式傳遞# 函數的調用func(name)        # 以positional參數調用func(name=value)   # 以keyword參數調用func(*iterable)     # 將iterable對象轉換成一連串單個positional參數進行調用func(**dictionary) # 將dictionary轉換成keywrod參數進行調用

這裡需要注意3點:

1 在Python 2.X中(在Python 3.X中,這種形式已經不允許了),還有一種定義函數的方式,就是將函數的參數定義成一個tuple,那麼,當調用函數的時候,傳遞一個結構一樣的tuple參數,這個tuple參數就會被unpack:

# 定義def func((a, (b, c))# 調用func((1, (2, 3))   # a=1, b=2, c=3func((1, [2, 3]))  # a=1, b=2, c=3,這樣調用也是可以的func((1, ‘mn‘))   # a=1, b=‘m‘, c=‘n‘, 這樣也可以,也就是說調用的時候只要是序列都可以# 但是定義的時候只能是tuple,不能出現其他序列,比如數組,下面的情形是不對的def func((a, [b, c]))

2 對於調用形式func(*name)和func(**name),也可以使用apply函數達到同樣的效果,但是apply函數只能在Python 2.X中使用,在Python 3.X中被移除了,使用形式為:

def func(*a, **b)a=(1, 2)b={‘c‘:3, ‘d‘:4}func(*a, **b)      # Python 2.X和Python 3.X均支援apply(func, a, b)  # 僅Python 2.X支援,效果一樣

3 對於預設參數,尤其要注意可變對象,每一次以預設形式象調用函數,這個預設的參數會被重用,而不會重設:

def func(a=[]):    a += [1]    print(a)>>>func()[1]>>>func()  # 此時a的值是[1][1, 1]>>>func()  # 此時a的值是[1, 1][1, 1, 1]

 

函數定義時參數的順序以及函數調用時參數的順序

Python中,定義函數和調用函數時,參數的順序有一定的規則,如果不符合規則,Python會報錯:

1 在定義函數時,參數的順序為:positional參數(name),預設參數(name=value),*name形式(或者只有一個*,但是只在Python 3.X中支援),name或者name=value形式(都只在Python 3.X中支援,叫keyword-only參數,後面name=value是賦預設值),**name形式;

2 在調用函數時,參數的順序為:positional參數(name),keyword參數(name=value)或者*name形式,**name形式

總之,**name無論在定義函數時,還是在調用函數時,都只應出現在最後。

 

函數參數的匹配步驟

Python內部,對於函數參數的匹配大致分為5步:

1 首先匹配positional參數(name)

2 匹配keywrod參數(name=value)

3 將額外的非keyword參數匹配給*name形式

4 將額外的keyword參數匹配給**name形式

5 如果有預設值,給未傳遞的參數賦預設值

經過上述步驟之後,Python還需要確保,每一個參數,只匹配了一個值,否則,就會報錯。

Python中函數的參數-arguments

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.