python函数传递参数的多种⽅法
python中函数根据是否有返回值可以分为四种:⽆参数⽆返回值,⽆参数有返回值,有参数⽆返回值,有参数有返回值。
Python中函数传递参数的形式主要有以下五种,分别为位置传递,关键字传递,默认值传递,不定参数传递(包裹传递)和解包裹传递。
1.位置传递实例:
def fun(a,b,c)
  return a+b+c
print(f(1,2,3))
2.关键字传递
关键字(keyword)传递是根据每个参数的名字传递参数。关键字并不⽤遵守位置的对应关系。
def fun(a,b,c)
  return a+b+c
print(f(1,c=3,b=2))
3.参数默认值
在定义函数的时候,使⽤形如c=10的⽅式,可以给参数赋予默认值(default)。如果该参数最终没有被传递值,将使⽤该默认值。
def f(a,b,c=10):
  return a+b+c
print(f(3,2))
print(f(3,2,1))
在第⼀次调⽤函数f时,我们并没有⾜够的值,c没有被赋值,c将使⽤默认值10.第⼆次调⽤函数的时候,c被赋值为1,不再使⽤默认值。
4.包裹传递
在定义函数时,我们有时候并不知道调⽤的时候会传递多少个参数。这时候,包裹(packing)位置参数,或者包裹关键字参数,来进⾏参数传递,会⾮常有⽤。
下⾯是包裹位置传递的例⼦:
def func(*name):
  print type(name)
  print name
func(1,4,6)
func(5,6,7,1,2,3)
两次调⽤,尽管参数个数不同,都基于同⼀个func定义。在func的参数表中,所有的参数被name收集,根据位置合并成⼀个元组(tuple),这就是包裹位置传递。
为了提醒Python参数,name是包裹位置传递所⽤的元组名,在定义func时,在name前加*号。
下⾯是包裹关键字传递的例⼦:
def func(**dict):
  print type(dict)
  print dict
  func((1,9))
  func("a":2,"b":1,"c":11)
与上⾯⼀个例⼦类似,dict是⼀个字典,收集所有的关键字,传递给函数func。为了提醒Python,参数dict是包裹关键字传递所⽤的字典,在dict前加**。
包裹传递的关键在于定义函数时,在相应元组或字典前加*或**。
5.解包裹
字符串函数传参*和**,也可以在调⽤的时候使⽤,即解包裹(unpacking), 下⾯为例:
def func(a,b,c):
  print a,b,c
args = (1,3,4)
func(*args)
dict = {'a':1,'b':2,'c':3}
func(**dict)
在这个例⼦中,所谓的解包裹,就是在传递tuple时,让tuple的每⼀个元素对应⼀个位置参数。在调⽤func时使⽤*,是为了提醒Python:我想要把args拆成分散的三个元素,分别传递给a,b,c。(设想⼀下在调⽤func时,args前⾯没有*会是什么后果?)
相应的,也存在对词典的解包裹,使⽤相同的func定义,然后:在传递词典dict时,让词典的每个键值对作为⼀个关键字传递给func。
6.综合实例:
下⾯是可变长参数的⼀些⽤法:
1
2 def foo(arg1,arg2="OK",*tupleArg,**dictArg):
3    print "arg1=",arg1
4    print "arg2=",arg2
5    for i,element in enumerate(tupleArg):
6        print "tupleArg %d-->%s" % (i,str(element))
7    for  key in dictArg:
8        print "dictArg %s-->%s" %(key,dictArg[key])
9
10 myList=["my1","my2"]
11 myDict={"name":"Tom","age":22}
12 foo("formal_args",arg2="argSecond",a=1)
13 print "*"*40
14 foo(123,myList,myDict)
15 print "*"*40
16 foo(123,rt=123,*myList,**myDict)
输出为:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。