1. 程式人生 > >一篇文章讓你掌握python函式引數的各種用法

一篇文章讓你掌握python函式引數的各種用法

 

python的函式引數型別比較豐富,而且用法相對比較複雜,今天我們介紹幾種簡單常用的。

當然在學習Python的道路上肯定會困難,沒有好的學習資料,怎麼去學習呢?

學習Python中有不明白推薦加入交流群
                號:960410445
                群裡有志同道合的小夥伴,互幫互助,
                群裡有不錯的視訊學習教程和PDF!

1、位置引數

位置引數最簡單了,就是按照位置關係一一對應就好了,也是我們最最常用的,但是要注意的是各個引數必須按順序對應,不多說,看下面這段程式碼就好了。

#位置引數,嚴格按照引數的順序來讀取
def locationParams(m,n):
 print('第一個引數為:'+m)
 print('第二個引數為:'+n)
locationParams('原始碼來自公眾號','譚某人')

 

第一個引數為:原始碼來自公眾號
第二個引數為:譚某人

 

2、預設引數

預設引數及在函式的定義的時候就給了個預設值,在函式呼叫的時候可以不傳這個預設引數,比如我們要計算 m-n 之間的正整數之和,我們可以分別給定 m 和 n 兩個預設值 1 和 100,這樣我們再呼叫該函式的時候即使不傳任何引數,該函式也會使用預設值來計算 1-100 之間的正整數之和。

在使用預設引數的時候要特別注意的一點是,預設引數必須要指向不可變物件,比如陣列、字典這些都是可變物件,是不能被用作預設引數的,至於為什麼,這裡不細說了,大家先記住就好,看下面這個例子。

#預設引數,注意不能使用list或dict等作為預設引數
def defaultParams(m=1,n=100):
 sum = 0
 for i in range(m,n+1):
 sum += i
 print(sum)
 return sum
#如果使用list陣列來作為預設引數,多次呼叫函式的返回值會發生變化,在使用過程要特別注意
def defaultParamsTemp(list=[]):
 list.append(9)
 print(list)
 return list
defaultParams(1,3)
defaultParamsTemp()
defaultParamsTemp()
defaultParamsTemp()

 

6
[9]
[9, 9]
[9, 9, 9]

 

3、可變引數

可變引數是指引數的個數是可變化的,可以是 0 個,可以是 1 個,也可以是多個,可變引數在定義的時候用符號 * 表示,而且在函式被呼叫的時候引數會被組裝成一個 tuple (類似 list 陣列的一種基本資料型別),比如我們要實現一個計算多個數字的平方和,多個數字即可以被當成一個可變引數傳過去,具體看下面的程式碼。

#可變引數
def variableParams(*params):
 print(params) #可變引數會被組裝成一個tuple
 sum = 0
 for i in params:
 sum += i*i
 print(sum)
 return sum
list = [2,4]
variableParams(2,4)
variableParams(list[0],list[1]) #如果已經存在了一個list陣列,我們可以使用陣列中單個元素作為可變引數傳入
variableParams(*list) #為了簡化上面的引數呼叫方式,可以使用*來把引數當做可變引數傳入

 

(2, 4)
20
(2, 4)
20
(2, 4)
20

 

4、關鍵字引數

關鍵字引數和可變引數類似,引數的個數都是可變的,所以也常被稱作可變關鍵字引數,但是和可變引數的區別在於關鍵字引數在呼叫的時候會被組裝成一個字典 dict ,而且引數是帶引數名的,關鍵字引數在定義的時候用兩個符號 ** 表示,和可變引數差不多,看下下面的具體程式碼就行。

#關鍵字引數
def keyWordParams(**params):
 print(params) #關鍵字引數會被組裝成一個字典dict 
dict = {'a':6,'b':3}
keyWordParams(a=6,b=3)
keyWordParams(**dict) #如果已經存在了一個dict,可以使用**來把引數當做關鍵字引數傳入

 

{'a': 6, 'b': 3}
{'a': 6, 'b': 3}

 

5、其實還有一種命名關鍵字引數,由於用起來稍微複雜些,這裡暫且不做介紹了,有興趣的可以自行去了解下。

既然有這麼多種引數型別,那麼當這些引數被混合使用的時候是怎麼的呢?

首先記住一個大原則,就是引數的順序原則:位置引數、預設引數、可變引數、命名關鍵字引數、關鍵字引數,在定義函式的時候一定要嚴格按照這個順序來定義函式引數,否則都不能 python 正確解析,再一個就是定義函式的時候儘量避免多個引數型別混合使用,這樣對函式的呼叫可讀性和理解性非常差,實際開發中通常用到一到兩種引數型別混合使用就差不多了。

#引數混合使用
def mergeParams(name,age,city='北京',*year,**detail):
 print('姓名:'+name)
 print('年齡:'+str(age))
 print('城市:'+city)
 for i in year:
 print('年份:'+str(i))
 print('其他:',detail)
year = [2017,2018]
detail = {'sex':'man','interset':'coding'}
mergeParams('譚某人',20)
mergeParams('譚某人',20,'中國',*year,**detail)

 

姓名:譚某人
年齡:20
城市:北京
其他: {}
姓名:譚某人
年齡:20
城市:中國
年份:2017
年份:2018
其他: {'sex': 'man', 'interset': 'coding'}