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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 魔法参数*argv 和 **kw

發(fā)布時間:2025/4/5 python 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 魔法参数*argv 和 **kw 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

阿里云大學(xué)人工智能學(xué)前小測驗-Python測驗

關(guān)于參數(shù)*argv 和 **kw的說法正確的是

A. 兩個參數(shù)必須為函數(shù)定義中參數(shù)列表中的排名最后的參數(shù)

B. *argv 代表該參數(shù)位置可以放任意個數(shù)的數(shù)據(jù)

C. **kw 代表該參數(shù)位置可以放 k=v 格式的數(shù)據(jù)

D. *argv最終會轉(zhuǎn)換成列表數(shù)據(jù)類型在函數(shù)體內(nèi)處理

?

參考資料:https://blog.csdn.net/weixin_43181110/article/details/83270129,https://blog.csdn.net/xiongchun11/article/details/54405674,感謝博主們

其實*args 和 **kwargs這兩個變量并不是必須寫成這樣子,只是變量前面的這個*(星號)是必須要的,后面的變量名我們可以自己定義,這個*args 和 **kwargs只是一個通俗的命名約定而已。

args,是arguments的縮寫,單純意思是參數(shù),kwargs是key word?arguments的縮寫,表示關(guān)鍵字參數(shù)。

它倆都是可變參數(shù),*args 是接收多個無名參數(shù),是一個tuple;**kwargs表示關(guān)鍵字參數(shù),它是一個dict。并且同時使用*args和**kwargs時,必須*args參數(shù)列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )這樣調(diào)用的話,會提示語法錯誤“SyntaxError: non-keyword arg after keyword arg”
?

?總結(jié):

相同點:兩個參數(shù)必須為函數(shù)定義中參數(shù)列表中的排名最后的參數(shù)
不同點:
1.*argv代表該參數(shù)位置可以放置任意個數(shù)的數(shù)據(jù),最終都會轉(zhuǎn)化成元祖數(shù)據(jù)類型在函數(shù)體內(nèi)處理
2.**kw代表該參數(shù)位置可以放置k=v格式的數(shù)據(jù),最終都會轉(zhuǎn)化成字典類型在函數(shù)體內(nèi)處理

注意點:參數(shù)arg、*args、**kwargs三個參數(shù)的位置必須是一定的。必須是(arg,*args,**kwargs)這個順序,否則程序會報錯

?

首先看一下*args的用法:

*args 和 **kwargs 主要用于函數(shù)定義。 你可以將不定數(shù)量的參數(shù)傳遞給一個函數(shù)。
這里的不定的意思是:預(yù)先并不知道, 函數(shù)使用者會傳遞多少個參數(shù)給你, 所以在這個場景下使用這兩個關(guān)鍵字。 *args 是用來發(fā)一個非鍵值對的可變數(shù)量的參數(shù)列表給一個函數(shù).例如:

def test_var_args(f_arg, *argv):
print("first normal arg:", f_arg)
for arg in argv:
print("another arg through *argv:", arg)
test_var_args('yasoob', 'python', 'eggs', 'test')
這會產(chǎn)生如下輸出:
first normal arg: yasoob
another arg through *argv: python
another arg through *argv: eggs
another arg through *argv: test


下面看一下**kwargs的用法:

**kwargs允許你將一個不定長度的鍵值對,作為參數(shù)傳遞給一個函數(shù)。如果需要在一個函數(shù)中處理帶名字的參數(shù)時,此時就應(yīng)該使用**kwargs了。

例如:

def greet_me(**kwargs):
for key, value in kwargs.items():
print("{0} == {1}".format(key, value))
>>> greet_me(name="yasoob")
name == yasoob
這就是**kwagrs用處,可以讓我們很好的在函數(shù)中處理一個鍵值對參數(shù)。
接下來讓我們看一下怎樣使用*args 和 **kwargs來調(diào)用一個參數(shù)為列表或者字典的函數(shù)。
假設(shè),我們有這樣一個函數(shù):

def test_args_kwargs(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)
我們現(xiàn)在使用*args或者**kwargs來給這個函數(shù)傳遞參數(shù):
首先使用*args:

>>> args = ("two", 3, 5)
>>> test_args_kwargs(*args)
arg1: two
arg2: 3
arg3: 5
現(xiàn)在使用**kwargs:
>>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
>>> test_args_kwargs(**kwargs)
arg1: 5
arg2: two
arg3: 3


標準參數(shù)與*args、**kwargs在使用時的順序需要特別注意一下。
如果現(xiàn)在該一個函數(shù)中同時使用這三種參數(shù),此時這三種參數(shù)的順序應(yīng)該是:標準參數(shù),*args,**kwargs

如?some_func(fargs, *args, **kwargs)
那么關(guān)于什么使用這些參數(shù),這就需要看自己的需求啦,也不是每個函數(shù)都需要使用者三種參數(shù)的,比較常見的應(yīng)該是在使用函數(shù)裝飾器的時候,此外它也可以用來做猴子補丁(monkey patch)。猴子補丁的意思是在程序運行時(runtime)修改某些代碼。 比如,你有一個類,里面有個叫g(shù)et_info的函數(shù)會調(diào)用一個API并返回響應(yīng)的數(shù)據(jù)。如果我們想測試它,可以把API調(diào)用替換成一些測試數(shù)據(jù)。例如:

import someclass
def get_info(self, *args):
return "Test data"
someclass.get_info = get_info

?

總結(jié)

以上是生活随笔為你收集整理的python 魔法参数*argv 和 **kw的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。