在學習python的過程中,第一次接觸函式的引數可能會有點懵,因為python所支援的函式引數種類很多也很強大,引數之間的名稱也容易引起混淆。這就造成了初次接觸時,難免記不住或者混淆這幾個概念。為了加強記憶,特自己整理總結一下。
函式的引數分為必選引數、預設引數、可變引數、關鍵字引數和命名關鍵字引數這幾種。
必選引數就是最常見的引數,定義乙個變數名用來接收,如
def sum(a,b):
sum = a + b
return sum
這裡的變數a,b便是必選引數了。
預設引數,就是當呼叫函式時,如果該引數未傳值,那麼就使用定義引數時的預設值,如
def sum(a,b,c=0):
sum = a + b + c
return sum
這裡的變數c就是個預設引數,其預設值為0,當呼叫sum函式時,如果沒有傳c這個引數,只給了兩個引數,那麼c就視為0。注意,如果乙個函式有必選引數和預設引數,那麼必選引數一定在預設引數之前。思考一下就知道其中緣由了,因為如果把預設引數放在必選引數前面,那麼呼叫函式的時候,python如何對應賦值呢,一定是必選引數在前,這樣如果只傳了必選引數,那麼後面的預設引數就使用預設值。
這時候如果有個需求,這個sum求和函式不固定傳幾個引數,只要求把所有的傳參都加起來,那麼無論定義幾個引數,都是不合適的。為了達到其通用性,就需要用到可變引數,如
def sum(*a):
for x in a:
sum += x
return sum
通過在引數前加上乙個*星號,就標識了這個引數為可變引數,這時候a就變成了乙個tuple元組,呼叫時可以傳入乙個list或者tuple。如果乙個函式有必選引數、預設引數和可變引數,那麼一定是必選引數在前,預設引數在中,可變引數在後。這裡的原因也很簡單,如果可變引數在前面,那麼還有必要定義必選引數和預設引數嗎。
在程式設計的過程中,有時候需要傳入乙個dict字典,根據字典的key來取相應的value去做一些操作,這時候就需要用到關鍵字引數,如
def info(**dict):
print('學生的名字:%s,學號:%s'%(dict['name'],dict['no'] ))
在引數前加**兩個星號,就代表了這個引數是乙個關鍵字引數。如果乙個函式有必選引數、預設引數、可變引數和關鍵字引數,那麼前面的順序不變,關鍵字引數在最後。其實可變引數和關鍵字引數的前後順序無所謂,至於為什麼python這樣安排,我們後面再講。
有時候,我們需要限制關鍵字引數中的key,相當於哪些是必須傳的,這時候可能就需要在函式體內去判斷這個key是否存在。為了簡化操作,python提供了命名關鍵字引數,如
def info(*,name,no):
print('學生的名字是%s,學號是%s'%(name,no))
通過在引數前加上*,(星號加逗號),就標誌了後面的引數都是命名關鍵字引數。呼叫時,需要使用key=value這樣的形式傳參。如果前面已經有了乙個可變引數,那麼*,就可以省略。如果函式中有必選引數、預設引數、可變引數、關鍵字引數和命名關鍵字引數,那麼前面順序不變,明明關鍵字引數要在關鍵字引數之前,這個和必選引數、可變引數順序的理由一致。這時候我們就知道為什麼python要安排可變引數在關鍵字引數之前了,因為如果只有有可變引數和命名關鍵字引數,而沒有關鍵字引數的話,就可以使用簡化語法,不需要在命名關鍵字引數前加上*,了。
至此函式的引數型別講解完畢,可以看到python是一種很強大的語言,為了簡化**,在寫的時候提供了很多方便的功能。
python學習 函式的引數
函式的引數函式取得的引數是你提供給函式的值,這樣函式就可以利用這些值做一些事情。這些引數就像變數一樣,只不過它們的值是在我們呼叫函式的時候定義的,而非在函式本身內賦值。引數在函式定義的圓括號對內指定,用逗號分割。當我們呼叫函式的時候,我們以同樣的方式提供值。注意我們使用過的術語 函式中的引數名稱為形...
Python學習 函式引數
定義函式的時候,我們把引數的名字和位置確定下來,函式的介面定義就完成了。對於函式的呼叫者來說,只需要知道如何傳遞正確的引數,以及函式將返回什麼樣的值就夠了,函式內部的複雜邏輯被封裝起來,呼叫者無需了解。coding utf 8 除了正常定義的必選引數外,還可以使用預設引數 可變引數和關鍵字引數 預設...
python學習 函式引數
數學定義 python函式 函式的作用 函式的分類 def 函式名 引數列表 函式體 塊 return 返回值 上面的 解釋 函式在定義時要約定好形式引數,呼叫時也提供足夠的實際引數,所以形參和實參個數要一致 可變引數除外 傳參方式 1.位置傳參 定義時def f x,y,z 呼叫使用f 1,3,5...