python中argument函数_Python中函数的参数-arguments

归纳起来,Python中函数的定义形式和调用形式主要有如下几种形式:

#函数的定义形式

def func(name) #匹配positional参数或者keyword参数

def func(name=value) #如果不传,有默认参数

def func(*name) #将额外的positional参数转换成一个tuple,然后赋给name

def func(**name) #将额外的keyword参数转换成一个dictionary,然后赋给name

def func(*other, name) #Python 3.X中定义keyword-only参数的形式,Python 2.X中不支持,此时,name一定要以keyword的形式传递

def func(*, name) #Python 3.X中定义keyword-only参数的形式, Python 2.X中不支持,此时, name一定要以keyword的形式传递

#函数的调用

func(name) #以positional参数调用

func(name=value) #以keyword参数调用

func(*iterable) #将iterable对象转换成一连串单个positional参数进行调用

func(**dictionary) #将dictionary转换成keywrod参数进行调用

这里需要注意3点:

1 在Python 2.X中(在Python 3.X中,这种形式已经不允许了),还有一种定义函数的方式,就是将函数的参数定义成一个tuple,那么,当调用函数的时候,传递一个结构一样的tuple参数,这个tuple参数就会被unpack:

#定义

deffunc((a, (b, c))#调用

func((1, (2, 3)) #a=1, b=2, c=3

func((1, [2, 3])) #a=1, b=2, c=3,这样调用也是可以的

func((1, ‘mn‘)) #a=1, b=‘m‘, c=‘n‘, 这样也可以,也就是说调用的时候只要是序列都可以

#但是定义的时候只能是tuple,不能出现其他序列,比如数组,下面的情形是不对的

def func((a, [b, c]))

2 对于调用形式func(*name)和func(**name),也可以使用apply函数达到同样的效果,但是apply函数只能在Python 2.X中使用,在Python 3.X中被移除了,使用形式为:

def func(*a, **b)

a=(1, 2)

b={‘c‘:3, ‘d‘:4}

func(*a, **b) #Python 2.X和Python 3.X均支持

apply(func, a, b)#仅Python 2.X支持,效果一样

3 对于默认参数,尤其要注意可变对象,每一次以默认形式象调用函数,这个默认的参数会被重用,而不会重置:

def func(a=[]):

a+= [1]print(a)>>>func()

[1]>>>func() #此时a的值是[1]

[1, 1]>>>func() #此时a的值是[1, 1]

[1, 1, 1]

函数定义时参数的顺序以及函数调用时参数的顺序

Python中,定义函数和调用函数时,参数的顺序有一定的规则,如果不符合规则,Python会报错:

1 在定义函数时,参数的顺序为:positional参数(name),默认参数(name=value),*name形式(或者只有一个*,但是只在Python 3.X中支持),name或者name=value形式(都只在Python 3.X中支持,叫keyword-only参数,后面name=value是赋默认值),**name形式;

2 在调用函数时,参数的顺序为:positional参数(name),keyword参数(name=value)或者*name形式,**name形式

总之,**name无论在定义函数时,还是在调用函数时,都只应出现在最后。

函数参数的匹配步骤

Python内部,对于函数参数的匹配大致分为5步:

1 首先匹配positional参数(name)

2 匹配keywrod参数(name=value)

3 将额外的非keyword参数匹配给*name形式

4 将额外的keyword参数匹配给**name形式

5 如果有默认值,给未传递的参数赋默认值

经过上述步骤之后,Python还需要确保,每一个参数,只匹配了一个值,否则,就会报错。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值