函数参数一:传递与匹配规则

来源:互联网 发布:rsa属于什么算法 编辑:程序博客网 时间:2024/05/18 02:20

一、参数传递规则:

1、不可变参数通过值进行传递(数字、字符串等)2、可变参数通过"指针"进行传递(字典、列表)

3、实例:

def change(a,b):    a = 2    b[0] = 'spam'AA = 1BB = [1,2]change(AA,BB)"""AA= 1BB= ['spam', 2]"""print "AA=",AAprint "BB=",BB

4、避免可变参数被修改,传入可变产生的拷贝

AA1 = 100BB1 = ['A','B']change(AA1,BB1[:])"""AA1= 100BB1= ['A', 'B']"""print "AA1=",AA1print "BB1=",BB1

二、函数参数匹配规则:

混合参数使用规则:1、函数调用赋值先后顺序:位置参数(value)->关键字参数(name=value)->*sequence收集参数->**dict收集参数2、函数头部定义先后顺序:一般参数(name)->任何默认参数(name=value)->*name ->keyvord-only->**name
参数匹配的步骤:1、通过位置分配非关键字参数2、通过匹配变量名分配关键字参数3、其他额外的非关键字参数分配给*name元组中4、其他额外的非关键字参数分配给**name字典中5、使用默认值分配给在头部未得到分配的参数*和**语法解析:在头部时意味着收集任意数量的参数在调用时解包任意数量的参数

1、任意参数实例,收集参数

def f(*args):    print args"""输出结果:()(1,)('a', [2, 3], {'a': 3}, 4)"""f()f(1)f('a',[2,3],{'a':3},4)def f11(**args):    print args"""输出结果:{}{'a': 1, 'b': 2}"""f11()f11(a=1,b=2)

2、混合参数实例:

def f22(a,*pargs,**kargs):    print a,pargs,kargs"""输出结果:1 (2, 3) {'y': 2, 'x': 1}"""f22(1,2,3,x=1,y=2)

3、解包参数,解包的时候参数个数必须对应上,多或是少均报错

def func11(a,b,c,d):    print a,b,c,dargs = (1,2)args += (3,4)"""运行结果:通过序列解包完成参数赋值1 2 3 4"""func11(*args)  #函数调用的时候,通过序列解包完成对应参数的赋值,注意调用时加'*'args1 = {'a':1,'b':2,'c':3}args1['d'] = 4"""通过字典的解包完成参数赋值:赋值的字典键值必须同参数名一一对应1 2 3 4"""func11(**args1) #注意调用时加'**'
0 0
原创粉丝点击