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

一、参数传递规则:

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

3、实例:

def change(a,b):
    a = 2
    b[0] = 'spam'

AA = 1
BB = [1,2]
change(AA,BB)
"""
AA= 1
BB= ['spam', 2]
"""
print "AA=",AA
print "BB=",BB

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

AA1 = 100
BB1 = ['A','B']
change(AA1,BB1[:])
"""
AA1= 100
BB1= ['A', 'B']
"""
print "AA1=",AA1
print "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,d
args = (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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值