截取百度里的两个答案:
这是Python函数可变参数 args及kwargs
*args表示任何多个无名参数,它是一个tuple
**kwargs表示关键字参数,它是一个dict
测试代码如下:
1 def foo(*args,**kwargs): 2 print 'args=',args 3 print 'kwargs=',kwargs 4 print '**********************' 5 if __name__=='__main__': 6 foo(1,2,3) 7 foo(a=1,b=2,c=3) 8 foo(1,2,3,a=1,b=2,c=3) 9 foo(1,'b','c',a=1,b='b',c='c')
执行结果如下:
1 args= (1, 2, 3) 2 kwargs= {} 3 ********************** 4 args= () 5 kwargs= {'a': 1, 'c': 3, 'b': 2} 6 ********************** 7 args= (1, 2, 3) 8 kwargs= {'a': 1, 'c': 3, 'b': 2} 9 ********************** 10 args= (1, 'b', 'c') 11 kwargs= {'a': 1, 'c': 'c', 'b': 'b'} 12 **********************
百度回答2:这是一种特殊的语法,在函数定义中使用*args和**kwargs传递可变长参数。*args用作传递非命名键值可变长参数列表(位置参数); **kwargs用作传递键值可变长参数列表。
示例 *args
1 def test_var_args(farg, *args): 2 print "formal arg:", farg 3 for arg in args: 4 print "another arg:", arg 5 6 test_var_args(1, "two", 3)
1 # 输出 2 formal arg: 1 3 another arg: two 4 another arg: 3
示例 **kwargs
1 def test_var_kwargs(farg, **kwargs): 2 print "formal arg:", farg 3 for key in kwargs: 4 print "another keyword arg: %s: %s" % (key, kwargs[key]) 5 6 test_var_kwargs(farg=1, myarg2="two", myarg3=3)
1 # 输出 2 formal arg: 1 3 another keyword arg: myarg2: two 4 another keyword arg: myarg3: 3
练习:
1 print("ex18.命名,变量,代码,函数") 2 3 #print_two是函数名,(*args)是参数,print()是函数体 4 def print_two(*args): 5 arg1,arg2 = args 6 print("arg1:%r,arg2:%r"%(arg1,arg2)) 7 8 def print_two_again(arg1,arg2): 9 print("arg1:%r,arg2:%r"%(arg1,arg2)) 10 11 def print_one(arg1): 12 print("arg1:%r"%arg1) 13 14 def print_none(): 15 print("I got nothin'.") 16 17 #以下为函数参数 18 print_two("Zed","solo") 19 print_two_again("Zed","Shaw") 20 print_one("First!") 21 print_none() 22 23 ''' 24 注意事项: 25 1、函数定义是以def开始 26 2、函数名称后面跟着括号,和冒号 27 3、函数名称可以是字符和下划线组成 28 4、括号内包含参数,且参数是以逗号隔开;也可以没有参数 29 5、函数体前有缩进,4个空格 30 6、参数内容可以重复,参数名称不可以一样 31 7、函数结束位置取消了缩进 32 '''
原文:https://zhidao.baidu.com/question/367559039025445444.html