天天看點

day7:python函數編寫:(拆包)

四、拆包

接下來教給大家一個新的知識點叫做拆包

既然我們函數中可以傳入多個參數,那麼我們在傳入參數的時候可不可以傳入清單和字典來當做參數呢?

可不可以呢?我們一起試一下就知道了,先傳入一個清單

func_argument(11,22,33,44,55,[1,2,3,4])
# 運作結果
11
22
(33,44,55,[1,2,3,4])
           

有沒有發現我們傳入的清單參數,以一個字元串的形式被args接收了,我們如果想把清單中的元素一個一個傳進去,那應該怎麼做 呢?想一想有沒有什麼辦法?剛剛我們在接收的形參前面加一個* ,就成了一個不定長參數,可以用來接收我們的未命名參數,那如果在傳入的清單這個參數面前加一個 *号會怎樣呢,我們一起來看一下

func_argument(11,22,33,44,55,*[1,2,3,4])
# 運作結果
11
22
(33,44,55,1,2,3,4)
{}
           

有沒有發現結果不一樣了,清單裡的元素被一個一個的傳了進去,是不是很神奇,這個就是我剛剛跟你們提到的新的知識點,叫做拆包。

清單進行拆包,那麼元組呢?

# @time:2019/10/26 10:14
# @Author:coco
# @File:01函數參數拆包.py
# @software:PyCharm

# * 用來接收位置參數的不定長參數
# ** 用來接收關鍵字參數的不定長參數

def func(*args, **kwargs):
    print(args)
    print(kwargs)
func(11, 22, 33, a=100, b=200)
           

運作結果:

day7:python函數編寫:(拆包)
# 傳遞一個元組
def func(*a, **kw):
    print(a)
    print(kw)

data = (11, 22, 33)
# 通過*對元組拆包,隻在在調用函數的時候可以用在函數的參數上
func(*data)
           
# 傳遞一個元組
def func(*a, **kw):
    print(a)
    print(**kw)

data = (11,22,33,44,55)
# 通過*對元組拆包,隻在在調用函數的時候可以用在函數的參數上
func(*data)
           

運作結果:

day7:python函數編寫:(拆包)
# 傳遞一個字典:是不可以傳字典的
def func2(*a, **kw):
    print(a)
    print(**kw)

data2={"a":11,"b":22}
func2(**data2)
           

運作結果:

day7:python函數編寫:(拆包)
# 傳遞一個清單
def func1(*args, **kwargs):
    print(args)
    print(**kwargs)

data = [11,22,33,44,55]
func1(*data)
           

運作結果:

day7:python函數編寫:(拆包)

繼續閱讀