Python 中函式的 收集引數 機制

小 樓 一 夜 聽 春 雨發表於2018-01-15

定義函式的時候,在引數前加了一個 * 號,函式可以接收零個或多個值作為引數。返回結果是一個元組。

傳遞零個引數時函式並不報錯,而是返回一個空元組。但以上這種方法也有侷限性,它不能收集關鍵字引數。

對關鍵字引數進行收集的另一種 收集引數 機制:使用兩個星號 ( ** ) ,用法同上。最後返回一個以引數名為鍵、引數值為鍵值的字典。

* 和 ** 是可以一起使用的,返回特定的結果。

 

引數收集的用處之一是使我們編寫函式時不用頭疼將 N 多個引數都塞在一個括號裡,既美觀又省事。用處之二便是:

* :可以將一系列值存放進一個元組變數裡,可用該元組變數名加一個 * 號作為引數傳遞給一個正被呼叫的函式,而後該函式就可以自由地對這些值進行一系列合法的操作。

** :同理,只不過變數存放的方式是字典。

 

def foo(*param):
    print(param)

def foo_1(**param):
    print(param)
def foo_2(*param1, **param2):
    print(param1)
    print(param2)

if __name__ == '__main__':
    foo(1,2,3,4)   # (1, 2, 3, 4)

    foo_1(a = 1, b=2, c=3, d=4) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

    foo_2(6,7,8, m = 9, n = 10) # (6, 7, 8) {'m': 9, 'n': 10}

  

Python的4種傳值的方式,必選傳參 func(param)、預設傳參func(param=value)、可選傳參func(*param)、關鍵字傳參func(**param)

# 必選引數 func(param): # 1、定義函式時的引數個數,順序已定義好,在呼叫函式調時的引數個數、順序必須一致,不能多,也不能少,也不能亂(和之前的順序一致),因此叫必選引數,這是最常用的傳參方式

def test(param1,param2,param3):

  print param1,param2,param3

test(1,"hello",True)

test(True,1,"hello")

執行結果:

1 hello True

True 1 hello 

 

# 預設引數func(param=value): #

1、定義函式時,已為引數設定一個預設值,假如呼叫函式時不傳參,在函式內部使用引數時的值則為預設值,傳參時則和必選引數一樣使用

# 2、如果必選引數和預設引數同時存在,則預設引數必須跟在必選引數後面

# 3、如果有多個預設引數,呼叫時順序可以不一致,但是必須要顯式表明是哪個預設引數,例如 param2=100,但是建議統一按照函式定義的順序進行使用

def test(param1,param2=100,param3=True):

  print param1,param2,param3 test(1)

# 預設引數可以不傳 test(1,"hello",False)

# 多個預設引數時,呼叫順序一致 test(1,param3=False,param2="hello")

# 呼叫順序也可以不一致

執行結果:

1 100 True

1 hello False

1 hello False 

 

相關文章