liyihao

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

原链: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

 

posted on 2017-10-16 16:17  liyihao  阅读(255)  评论(0)    收藏  举报