Python * 与 ** 修饰符解析

来源:互联网 发布:最讨厌的动漫人物知乎 编辑:程序博客网 时间:2024/06/04 19:40

1. 当*与**出现在函数定义中时:

*    表示此参数类型为tuple

**  表示此参数类型为dict

且*参数类型必须位于**参数类型之前.


请看一个例子:

def foo(*args, **kwargs):    print 'args = ', args    print 'kwargs = ', kwargs    print '---------------------------------------'if __name__ == '__main__':    foo(1,2,3,4)    foo(a=1,b=2,c=3)    foo(1,2,3,4, a=1,b=2,c=3)    foo('a', 1, None, a=1, b='2', c=3)

其输出结果为:

args =  (1, 2, 3, 4) kwargs =  {} --------------------------------------- args =  () kwargs =  {'a': 1, 'c': 3, 'b': 2} --------------------------------------- args =  (1, 2, 3, 4) kwargs =  {'a': 1, 'c': 3, 'b': 2} --------------------------------------- args =  ('a', 1, None) kwargs =  {'a': 1, 'c': 3, 'b': '2'} ---------------------------------------

2. 当*与**出现在函数调用中时:

*    表示此参数类型为tuple

**  表示此参数类型为dict

请看使用*修饰调用参数的一个例子:

def test_var_args_call(arg1, arg2, arg3):    print "arg1:", arg1    print "arg2:", arg2    print "arg3:", arg3args = ("two", 3)test_var_args_call(1, *args)

输出结果为:

arg1: 1arg2: twoarg3: 3

再看使用**修饰调用参数的例子:

def test_var_args_call(arg1, arg2, arg3):    print "arg1:", arg1    print "arg2:", arg2    print "arg3:", arg3kwargs = {"arg3": 3, "arg2": "two"}test_var_args_call(1, **kwargs)

输出结果为:

arg1: 1arg2: twoarg3: 3

.

原创粉丝点击