原链:http://www.cnblogs.com/vamei/archive/2012/07/08/2581264.html
笔记:
1 #第14讲 2 #参数对应 3 4 #参数传递 5 def f(a,b,c): 6 return a+b+c 7 8 print (f(1,2,3)) 9 10 #这个是按照参数位置来传递的,把1传递给a,把2传递给b,把c传递给3,return a+b+c 11 12 print (f(c=2,b=3,a=4)) 13 #关键字传递,是根据参数名字传递参数,把c的2传给c 14 #不用考虑位置因素 15 16 #关键字传递和位置传递混用,但是位置参数要在关键字之前 17 print (f(1,c=2,b=4)) 18 #把1传递给a,剩下按照参数名字传递 19 20 #参数默认值 21 def f(a,b,c=10): 22 return a+b+c 23 24 print (f(2,3)) 25 #根据位置传递,把2传递a,把3传递给b,c使用默认值10 26 #输出就是15 27 28 print (f(3,2,1)) 29 #有了足够的值,c=1,就不用c=10了 30 #输出就是6 31 32 33 34 #包裹传递 35 def func(*name): 36 print (type(name)) 37 print (name) 38 39 func(1,4,6) 40 41 #<class 'tuple'> 42 #(1, 4, 6) 43 #所有参数被收集,合并成一个元组(tuple),包裹传递 44 #尝试过list,会报错 45 46 func(5,6,7,1,2,3) 47 48 #输出<class 'tuple'> 49 #(5, 6, 7, 1, 2, 3) 50 51 52 ###为了提醒python,参数name是包裹位置传递所用的元组名,定义func时,在name前加* 53 54 55 #包裹关键字传递 56 57 def func(**dict): 58 print (type(dict)) 59 print (dict) 60 61 func(a=1,b=9) 62 #输出是一个字典:{'a': 1, 'b': 9} 63 func(m=2,n=1,c=11) 64 #同理{'m': 2, 'n': 1, 'c': 11} 65 #所有参数被dict收集 66 67 ###参数dict是包裹关键字传递用的字典,在dict前加** 68 #包裹传递,定义函数,def func(),在相应元组或字典前加*或** 69 70 71 #解包裹 unpacking 72 73 def func(a,b,c): 74 print (a,b,c) 75 76 args = (1,3,4) 77 func(*args) 78 #输出结果:1,3,4 79 80 #解包裹,让tuple 每一个元素对应一个位置参数 81 # * 的作用,提醒python,我想把args拆分的三个元素,分别传递a b c 82 #没有 * 的话,会把args 当做一个参数传递,但是其他位置没有元素,就会报错 83 #func()里面只有一个元素,可以不用 * 号 84 85 86 dict = {'a':1, 'b':2, 'c':3} 87 func(**dict) 88 89 #输出结果:1,2,3 90 #字典传递,字典每个key 作为关键字传递给func 91 92 93 94 #定义或者调用参数,参数可以混合传递 95 #混合传递要注意前后顺序,就1,b=3,c=4 96 97 ''' 98 def f(a,b,c): 99 return a+b+c 100 101 print (f(a=1,b=3,4)) 102 SyntaxError: positional argument follows keyword argument 103 ''' 104 105 #先位置,再关键字,再包裹位置,再包裹关键字 106 107 108 def func(a,b,c=1): 109 print (a,b,c) 110 111 args = (1,2) 112 func(*args) 113 114 #输出是 1,2,1
func(*dict)
返回dict 的key
func(**dict)
返回dict 的value
20171016更新
在页面下面发现一个很实用的例子
def func(a=0,b=0,c=0,d=0,e=0,f=0,g=0): print (a,b,c,d,e,f,g) args = (4,5) args1 = {'e':6, 'd':7} func(1,*args,g=2,f=3,**args1) #同时传递位置参数,关键字参数,包裹参数,包裹关键字参数 # *args 提示是元组,b就是4,c就是5 #g 是2 f是3 # **args1 是dict ,取值,e是6 d是7 #输出:1 4 5 7 6 3 2
浙公网安备 33010602011771号