天天看點

python裡面的帶*和**的參數作用

今天我們來看一下在Python中的*和**的作用。下面我們先來看一下示例:

# -*- coding: utf-8 -*-
"""
Created on Mon Nov 19 06:26:40 2018

@author: FanXiaoLei
"""
def func(*args,**kwargs):
    print(args,'----',kwargs)
print(func(1,3,5,23,7,a=3,b=12,c=34))
print("---------------------------------------")
print(func((1,3,5,23,7),{'a':3,'b':12,'c':34}))
print(func(*(1,3,5,23,7),**{'a':3,'b':12,'c':34}))
print("---------------------------------------")
print(func([9,6,5,0],a=3,b=12,c=34))
print(func(*[9,6,5,0],a=3,b=12,c=34))
           

上面是一個沒有傳回值的函數。我們主要列印一下函數傳入的參數形式。看一下結果:

python裡面的帶*和**的參數作用

         因為沒有return 傳回任何結果是以函數值都傳回了None.這個不是重點。我們來關注一下我們列印的參數結果。第一個列印print(func(1,3,5,23,7,a=3,b=12,c=34))傳遞了位置參數和後面的a,b,c帶的關鍵詞參數,傳回的結果是(1, 3, 5, 23, 7) 這個元組和{'a': 3, 'b': 12, 'c': 34} 這個字典。說明了位置參數是以元組形式傳入和關鍵詞參數是以字典的形式傳入。

       然後我就試了下直接以元組和字典作為參數傳遞參數。代碼:print(func((1,3,5,23,7),{'a':3,'b':12,'c':34}))。結果傳回的是((1, 3, 5, 23, 7), {'a': 3, 'b': 12, 'c': 34}) ---- {}.我們發現傳回的是一個以元組和字典為元素的元組和一個空字典的結果。很明顯這樣是把整個元組和字典作為2個參數傳遞。因為元組和字典這個整體對象都沒有使用關鍵詞,是以以位置參數處理,傳回了第一個參數,也就是以元組和字典構成的元組。沒有關鍵詞是以沒有傳遞字典參數,即傳回了一個空的字典。

python裡面的帶*和**的參數作用

那我們要是元組以單個元素傳遞,字典也以單個關鍵詞傳遞該怎麼辦呢?就需要使用*和**了。

print(func(*(1,3,5,23,7),**{'a':3,'b':12,'c':34}))。這樣就傳回了我們想要的結果了。

python裡面的帶*和**的參數作用

同樣的清單想要作為位置參數将裡面單個傳遞進去,也需要使用*了。沒使用*的時候整個list會作為一個位置參數傳入而不會将list分解成單個元素傳遞到函數裡。代碼:print(func([9,6,5,0],a=3,b=12,c=34)),結果如圖:

python裡面的帶*和**的參數作用

使用了星号以後就對了。代碼:print(func(*[9,6,5,0],a=3,b=12,c=34)),得到結果:

python裡面的帶*和**的參數作用

到這裡應該說的差不多了,收工繼續深造了,啦啦。