python中 *args和**kwargs的基本用法
可以查看stackoverflow中的内容: http://stackoverflow.com/questions/3394835/args-and-kwargs
*args
and **kwargs
用*args
和**kwargs
只是为了方便并没有强制使用它们.
当你不确定你的函数里将要传递多少参数时你可以用*args
.例如,它可以传递任意数量的参数:
1
2
3
4
5
6
7
8
|
>>>
def
print_everything
(
*
args
)
:
for
count
,
thing
in
enumerate
(
args
)
:
.
.
.
print
'{0}. {1}'
.
format
(
count
,
thing
)
.
.
.
>>>
print_everything
(
'apple'
,
'banana'
,
'cabbage'
)
0.
apple
1.
banana
2.
cabbage
|
相似的,**kwargs
允许你使用没有事先定义的参数名:
1
2
3
4
5
6
7
|
>>>
def
table_things
(
*
*
kwargs
)
:
.
.
.
for
name
,
value
in
kwargs
.
items
(
)
:
.
.
.
print
'{0} = {1}'
.
format
(
name
,
value
)
.
.
.
>>>
table_things
(
apple
=
'fruit'
,
cabbage
=
'vegetable'
)
cabbage
=
vegetable
apple
=
fruit
|
你也可以混着用.命名参数首先获得参数值然后所有的其他参数都传递给*args
和**kwargs
.命名参数在列表的最前端.例如:
1
|
def
table_things
(
titlestring
,
*
*
kwargs
)
|
*args
和**kwargs
可以同时在函数的定义中,但是*args
必须在**kwargs
前面.
当调用函数时你也可以用*
和**
语法.例如:
1
2
3
4
5
6
7
|
>>>
def
print_three_things
(
a
,
b
,
c
)
:
.
.
.
print
'a = {0}, b = {1}, c = {2}'
.
format
(
a
,
b
,
c
)
.
.
.
>>>
mylist
=
[
'aardvark'
,
'baboon'
,
'cat'
]
>>>
print_three_things
(
*
mylist
)
a
=
aardvark
,
b
=
baboon
,
c
=
cat
|
就像你看到的一样,它可以传递列表(或者元组)的每一项并把它们解包.注意必须与它们在函数里的参数相吻合.当然,你也可以在函数定义或者函数调用时用*.