在學習python時,總會遇到*args和**kwargs這兩個魔法變數,那麼它們到底是什麼?
首先,並不是必須寫成*args和**kwargs
。只有變數前面的*(星號)才是必須的,你也可以寫成*var 和**vars
,而寫成*args 和**kwargs
只是乙個通俗的命名約定。
其次,他們還有一種叫法:引數組.它是通過乙個把元祖(非關鍵字引數)或字典(關鍵字引數)作為引數組傳遞給函式,他們是乙個沒有顯式定義引數的函式.
1 .*args
的用法
*args和**kwargs
主要用於函式定義。你可以將不定數量的引數傳遞給乙個函式。
這裡的不定的意思是:預先並不知道函式使用者會傳遞多少個引數給你,所以在這個場景下使用這兩個關鍵字。
*args
是用來傳送乙個非鍵值對的可變數量的引數列表給乙個函式。
簡單舉例:
>>
>
deffunc1
(*args):.
..print
(args)..
.>>
> func1()(
)>>
> func1(
'hao')(
'hao',)
>>
> func1(
'hao'
,123)(
'hao'
,123
)
有個例子幫你理解這個概念:
def
test_args
(arg1,
*ar**)
:print
("變數1:"
, arg1)
for arg in ar**:
print
("變數引數組引數為:"
, arg)
test_args(
'1',
'2',
'3',
'4')
輸出結果為:
變數1:: 1
變數引數組引數為: 2
變數引數組引數為: 3
變數引數組引數為: 4
2. **kwargs的用法
kwargs允許你將不定長度的鍵值對(字典),作為引數傳遞給乙個函式。如果你想要在乙個函式裡處理帶名字的引數,你應該使用kwargs。
簡單舉例:
>>
>
deffunc2
(**kwargs):.
..print
(kwargs)..
.>>
> func2(
)>>
> func2(name=
'tom'
,age=20)
def
test_kwargs
(**kwargs)
:for key, value in kwargs.items():
print
(" == "
.format
(key, value)
)>>
> test_kwargs(name=
"tom"
)name == tom
現在你可以看出我們怎樣在乙個函式裡,處理了乙個鍵值對引數了。這就是**kwargs
的基礎。
接下來說說怎樣使用*args和**kwargs
來呼叫乙個引數為列表或者字典的函式。
3. 使用*args和**kwargs來呼叫函式
那現在我們將看到怎樣使用*args和**kwargs
來呼叫乙個函式。
簡單舉例 1 :
定義乙個簡單函式
>>
>
def get_age(name,age):.
..print
('%s is %s years old'
%(name,age)
)
首先使用*args:>>
> user =
['tom',20
]>>
> get_age(user[0]
,user[1]
)tom is
20 years old
>>
> get_age(
*user)
tom is
20 years old
現在使用**kwargs:>>
> user_dict =
['name'
:'tom'
,'age':20
]>>
> get_age(name=
'tom'
,age=20)
tom is
20 years old
>>
> get_age(
**user_dict)
tom is
20 years old
舉例2:
假設你有這樣乙個函式:
def
test_args_kwargs
(arg1, arg2, arg3)
:print
("arg1:"
, arg1)
print
("arg2:"
, arg2)
print
("arg3:"
, arg3)
你可以使用*args或**kwargs來給這個函式傳遞引數。下面是怎樣做:
首先使用*args:
>>
> args =
("two",3
,5)>>
> test_args_kwargs(
*args)
arg1: two
arg2:
3arg3:
5
現在使用**kwargs:>>
> kwargs =
>>
> test_args_kwargs(
**kwargs)
arg1:
5arg2: two
arg3:
3
如果你想在函式裡同時使用標準引數、*args和**kwargs這三種引數, 順序是這樣的:
some_func(fargs, *args, **kwargs)
4 使用的場景
視需求而定。最常見的用例是在寫函式裝飾器的時候。
此外它也可以用來做猴子補丁(monkey patching)。猴子補丁的意思是在程式執行時(runtime)修改某些**。舉個例子,你有乙個類,裡面有個叫get_info的函式會呼叫乙個api並返回相應的資料。如果想測試它,可以把api呼叫替換成一些測試資料。例如:
import someclass
defget_info
(self,
*args)
:return
"test data"
someclass.get_info = get_info
python的 args和 kwargs用法
python的 args和 kwargs如何用,看了下面的例子你就清楚了。先來看乙個例子 複製 如下 def foo args,kwargs print args args print kwargs kwargs print if name main foo 1,2,3,4 foo a 1,b 2,...
Python 什麼是 args和 kwargs
今天看原始碼的時候發現乙個是 args和 kwargs,一看就能知道args是神馬,就是所有引數的陣列,kwargs就不知道了,google一下,乙個人的blog寫的比較簡單明瞭,秒懂了 kwargs就是當你傳入key value是儲存的字典。補充一下 kwargs不影響引數位置 例子 def te...
Python學習之 args和 kwargs
學習python 有所幫助。函式定義 在python的函式定義中使用 args和 kwargs可傳遞可變引數。args用作傳遞非命名鍵值可變長引數列表 位置引數 kwargs用作傳遞鍵值可變長引數列表。當你不確定你的函式裡將要傳遞多少引數時你可以用 args.例如,它可以傳遞任意數量的引數,args...