Python 魔法變數 args和 kwargs

2021-10-03 07:21:14 字數 3664 閱讀 8801

在學習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...