四、拆包
接下來教給大家一個新的知識點叫做拆包
既然我們函數中可以傳入多個參數,那麼我們在傳入參數的時候可不可以傳入清單和字典來當做參數呢?
可不可以呢?我們一起試一下就知道了,先傳入一個清單
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)
運作結果:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuYDN3UjNyATM2IDMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
# 傳遞一個元組
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)
運作結果:
# 傳遞一個字典:是不可以傳字典的
def func2(*a, **kw):
print(a)
print(**kw)
data2={"a":11,"b":22}
func2(**data2)
運作結果:
# 傳遞一個清單
def func1(*args, **kwargs):
print(args)
print(**kwargs)
data = [11,22,33,44,55]
func1(*data)
運作結果: