文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>How to use *args and **kwargs in Python

How to use *args and **kwargs in Python

时间:2010-03-08  来源:flyaway57


怎样在python中使用可变长的参数

在函数定义中,*args和**kwargs这种特殊的形式用来向函数传递可变数的参数。
一个星号的形式(*args)用来传递一个可变长度的tuple参数(非关键字可变长度的参数),两个星号的形式用来传递一个可变长度的字典参数。
下面是一个使用非关键字参数的形式。这个例子传递一个固定参数和两个变长参数。

def test_var_args(farg, *args):
    print type(args)
    print 'formal arg:', farg

    for arg in args:
        print 'another arg:', arg


test_var_args(1, 'two', 3)

结果:

<type 'tuple'> #从这里可以看出,这个可变参数(*args)的类型是tuple
formal arg: 1
another arg: two
another arg: 3


下面是使用关键字参数的形式。同样,传递一个固定参数和两个关键字变量参数

def test_var_kwargs(frag, **kwargs):
    print type(kwargs)

    print 'formal arg:', frag

    for key in kwargs:

    print 'another keyword arg: %s : %s' % (key, kwargs[key])

test_var_kwargs(frag=1, myarg2='two', myarg3=3)

结果:

<type 'dict'> #从这里可以看出,这个可变参数(**kwargs)的类型是dict
formal arg: 1
another keyword arg: myarg2 : two
another keyword arg: myarg3 : 3



在调用函数时使用*args和**kwargs
这种特殊的语法,不仅仅可以在函数定义中使用,也可以在调用函数的时候使用

def test_var_args_call(arg1, arg2, arg3):
    print 'arg1:', arg1
    print 'arg2:', arg2
    print 'arg3:', arg3

args = (1, 'two', 3)
test_var_args_call(*args)


结果:

arg1: 1
arg2: two
arg3: 3


下面这个例子是在调用函数时使用关键字参数

def test_var_args_call(arg1, arg2, arg3):
    print 'arg1:', arg1
    print 'arg2:', arg2
    print 'arg3:', arg3

kwargs = {'arg3':3, 'arg2':'two', 'arg1':1}
test_var_args_call(**kwargs)

结果:

arg1: 1
arg2: two
arg3: 3


下面是自己的总结:
args和kwargs这两个的名字是可以变化的

def test_var(**haha):
    print type(haha)
    for eachkey in haha:
       print 'another keyword arg: %s: %s' % (eachkey, haha[eachkey])

>>> test_var(myarg1=1, myarg2='two', myarg3=3)

结果:

<type 'dict'> #都是dict
another keyword arg: myarg1: 1
another keyword arg: myarg2: two
another keyword arg: myarg3: 3

这就是说,只要你用的是一个星号(*)的形式,就是一个非关键字的可变长的参数,两个星号(**)的形式就是一个关键字的可变长参数,而与名字args,kwargs无关。当然,最好还是用args,kwargs这两个名字,约定俗成的东西还是最好不要改。


当然,args和kwargs可以一起使用

def test_args_kwargs(*args, **kwargs):
    for arg in args:
        print arg
    for key in kwargs:
        print key,kwargs[key]

test_args_kwargs(1, 'two', myarg3=3)

结果:

1
two
myarg3 3


但是,这两者的使用是有顺序的,即单星号在前,双星号在后。

def test_args_kwargs(*args, **kwargs):
    for arg in args:
        print arg
    for key in kwargs:
        print key,kwargs[key]


test_args_kwargs(myarg3=3, 1, 'two')

结果:

File "<stdin>", line 1
SyntaxError: non-keyword arg after keyword arg


相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载