函数的参数传递


def func(a=1,b=2,c=3):  #形参有默认值
    print a,b,c
func()
func(4,5,6)
func(5,6)
func(7)
func(a=8)
func(a=9,b=10)
func(11,c=12)          #func(11,a=12)和func(a=12,13)是错误的

def calcSum(*args):#可以接受任意数量的参数
    sum=0
    for i in args:
        sum+=i
    print sum
#调用:
calcSum(1,2,3)
calcSum(123,456)
calcSum()

#在变量前加上*,调用时的参数会存储在一个tuple(元组)对象中,赋值给形参。
#在函数内部需要对参数进行处理时,只要对这个tuple类型的形参进行操作就可以了
#因此函数在定义时不需要指明参数个数,就可以处理任意参数个数的情况
#tuple是有序的,所以args中元素的顺序受到赋值时的影响
def printALL(*args):
    for i in args:
        print i,
    print
printALL(1,2,3)
printALL(3,2,1) 

#可以按照函数名传递参数,不受位置的限制,也可以像tuple传递一样不受限制
#func2(**kargs)则是把参数以键值对字典的形式传入
def printAll(**kargs):
    for k in kargs:
        print k,':',kargs[k]#字典是无序的,故在输出的时候,不一定按照提供参数的顺序
                            #调用时,参数的顺序无所谓,只要对应合适的形参名就可以
printAll(a=1,b=2,c=3)
printAll(x=4,y=5)

#混合的参数调用方式
def func3(x,y=5,*a,**b):
    print x,y,a,b

func3(1)                    #混合使用时,首先注意函数的写法,必须遵守:
func3(1,2)                  #带有默认值的形参(arg=)须在无默认值的形参之后;
func3(1,2,3)                #元组参数(*args)须在带有默认值的形参(arg=)之后;
func3(x=1)                  #字典参数(**kargs)须在元组参数(*args)之后
func3(x=1,y=1)
func3(x=1,y=1,a=1,b=1)      #可以省略某种类型的参数,仍需保证此顺序规则
func3(1,y=1)                #调用时遵守
func3(1,2,3,4,a=1)          #指定参数名称的参数要在没指定名称的参数之后
func3(1,2,3,4,k=1,t=0,o=3)  #不可以重复传递
'''
#函数被调用时,参数的传递过程为:
#1.按顺序把没指定参数的实参赋给形参
#2.把指定参数名称(args=v)的实参赋给对应的形参;
#3.将多余的没指定参数的实参打包成一个tuple传递给元组参数(*args);
#4.将多余的指定参数名的实参打包成一个dict传递给字典参数(**kargs)
'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值