日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Python3中参数*args和**kwargs介绍

發(fā)布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3中参数*args和**kwargs介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? 在Python中,我們可以使用兩種特殊符號將可變數(shù)量的參數(shù)傳遞給函數(shù):*args和**kwargs。你可以使用任何單詞代替args和kwargs,但通常做法是使用args和kwargs。

? ? ? *args允許函數(shù)接受任意數(shù)量的位置參數(shù)(positional arguments)

? ? ? **kwargs收集所有未明確定義的關鍵字參數(shù)。因此,它執(zhí)行與*args相同的操作,但針對關鍵字參數(shù)。**kwargs允許函數(shù)接受任意數(shù)量的關鍵字參數(shù)。默認情況下,**kwargs是一個空字典。每個未定義的關鍵字參數(shù)都作為鍵值對存儲在**kwargs字典中

? ? ? Python不允許位置參數(shù)跟在關鍵字參數(shù)之后

? ? ? 位置參數(shù)(positional arguments)和關鍵字參數(shù)(key word arguments)區(qū)別:位置參數(shù)僅由名稱聲明;關鍵字參數(shù)由名稱和默認值聲明。調用函數(shù)時,必須給出位置參數(shù)的值,否則會得到一個error。如果我們沒有為關鍵字參數(shù)指定值,它將采用默認值。

? ? ? 我們可以在函數(shù)中同時使用*args和**kwargs,但*args必須放在**kwargs之前。

? ? ? 我們可以使用*args和**kwargs打包和解包(pack and unpack)變量。

? ? ? 以上內容和以下測試代碼主要參考:https://towardsdatascience.com/10-examples-to-master-args-and-kwargs-in-python-6f1e8cc30749


# https://towardsdatascience.com/10-examples-to-master-args-and-kwargs-in-python-6f1e8cc30749
var = 8
if var == 1:# *args允許函數(shù)接受任意數(shù)量的位置參數(shù)def addition(*args):result = 0for i in args:result += ireturn result# 傳遞給此addition函數(shù)的參數(shù)存儲在一個元組中,因此可以迭代args變量print("addition():", addition())print("addition(1, 4):", addition(1, 4))print("addition(1, 7, 3):", addition(1, 7, 3))
elif var == 2:def arg_printer(a, b, *args):print(f"a is {a}")print(f"b is {b}")print(f"args is {args}")# 前兩個值被賦予a和b,其余值存儲在args元組中arg_printer(3, 4, 5, 8, 3)# Python希望將關鍵字參數(shù)放在位置參數(shù)之后# 如果為位置參數(shù)賦值,它就成為關鍵字參數(shù).由于它后面是位置參數(shù),因此會得到一個SyntaxError#arg_printer(a=4, 2, 4, 5) # SyntaxError: positional argument follows keyword argument
elif var == 3:def addition(a, b, *args, option=True): # option是關鍵字參數(shù)result = 0if option:for i in args:result += ireturn a + b + resultelse:return resultprint(addition(1,4,5,6,7)) # 23print(addition(1,4,5,6,7, option=False)) # 0
elif var == 4:# **kwargs允許函數(shù)接受任意數(shù)量的關鍵字參數(shù),它收集所有未明確定義的關鍵字參數(shù),默認**kwargs是一個空字典,每個未定義的關鍵字參數(shù)都作為鍵值對存儲在**kwargs字典中def arg_printer(a, b, option=True, **kwargs):print(a, b) # 3 4print(option) # Trueprint(kwargs) # {'param1': 5, 'param2': 6}arg_printer(3, 4, param1=5, param2=6)
elif var == 5:# 我們可以在函數(shù)中同時使用*args和**kwargs,但*args必須放在**kwargs之前def arg_printer(a, b, *args, option=True, **kwargs):print(a, b) # 1 4print(args) # (6, 5)print(option) # Trueprint(kwargs) # {'param1': 5, 'param2': 6}arg_printer(1, 4, 6, 5, param1=5, param2=6)
elif var == 6:# 我們可以使用*args打包和解包(pack and unpack)變量def arg_printer(*args):print(args)lst = [1,4,5]# 如果我們將一個列表傳遞給arg_printer,它將作為一個元素存儲在args元組中arg_printer(lst) # ([1, 4, 5],)# 如果我們在lst之前放一個星號,列表中的值將被解包(unpack)并單獨存儲在args元組中arg_printer(*lst) # (1, 4, 5)tpl = ('a','b',4)# 我們可以傳遞多個可迭代對象與單個元素一起解包(unpack),所有值都將存儲在args元組中arg_printer(*lst, *tpl, 5, 6) # (1, 4, 5, 'a', 'b', 4, 5, 6)
elif var == 7:# 我們也可以使用關鍵字參數(shù)(keyword argument)進行打包和解包(pack and unpack),# 但是作為關鍵字參數(shù)傳遞的迭代必須是一個映射,比如字典def arg_printer(**kwargs):print(kwargs)dct = {'param1':5, 'param2':8}arg_printer(**dct) # {'param1': 5, 'param2': 8}# 如果我們還將額外的關鍵字參數(shù)與字典一起傳遞,它們將組合并存儲在kwargs字典中arg_printer(param3=9, **dct) # {'param3': 9, 'param1': 5, 'param2': 8}
elif var == 8:# reference: https://www.geeksforgeeks.org/args-kwargs-python/def myFun(arg1, arg2, arg3):print(f"arg1: {arg1}, arg2: {arg2}, arg3: {arg3}")args = ("Geeks", "for", "Geeks")myFun(*args) # arg1: Geeks, arg2: for, arg3: Geekskwargs = {"arg1" : "Geeks", "arg2" : "for", "arg3" : "Geeks"}myFun(**kwargs) # arg1: Geeks, arg2: for, arg3: Geeksprint("test finish")

? ? ? GitHub:https://github.com/fengbingchun/Python_Test

總結

以上是生活随笔為你收集整理的Python3中参数*args和**kwargs介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。