[python]函数默认参数顺序问题

python 函数参数定义有四类:

1、必选参数:调用函数时候必须赋值的参数。

a,须以正确的顺序传入函数
b,调用时的数量必须和声明时的一样

def exa(x):
    return x
 
#b作为参数进入函数体内
b=1
print exa(b) #1
print exa()
#错误 TypeError: exa() takes exactly 1 argument (0 given)

2,默认参数:初始已经有值,在调用时未更改使用默认值

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def exa(x=1)
    return x
 
print exa() # 1
print exa(2) # 2

3,可变参数:不确定参数个数,会分配给带“*”参数

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def exa(*x)
    return x
 
print exa(1,2,3,4,5,6,6)
# (1,2,3,4,5,6,6)

4,关键字参数:使用关键字参数来确定传入的参数值。调用函数时带关键字后,顺序不影响。

def exa(x,y,z):
    return x,y,z
 
print exa(y=2,x=3,z=2) #(3, 2, 2)

Tips:可变元组参数和可变字典参数

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
*x
#可变元组参数,参数格式化存储在一个元组中,长度没有限制。
#python2必须位于普通参数和默认参数之后。
#python3可以位于默认参数之前

def exa(*x):
    return x
print exa('ai', 'ni', 'ya')
#('ai', 'ni', 'ya')
 
 
**x
#可变字典参数
#必须位于参数列表的最后面。
def exa(**x):
    return x
print exa(ai="爱",ni="你")
#{'ai': '爱', 'ni': '你'}

函数参数顺序

args与必选参数和默认参数混用

1、python2、python3 三者顺序是:位置参数、默认参数、*args

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def foo(x,y=1,*args):
     pass
foo (1,2,3,4,5) // 其中的x为1,y=1的值被2替换,3,4,5都给args,即args=(3,4,5)

2、python3 三者顺序是:位置参数、*args、默认参数

def foo(x,*args,y=1):
     pass
foo (1,2,3,4,5) // 其中的x为12,3,4,5都给args,即args=(2,3,4,5),y始终为1

3、python2、python3 **kwargs与位置参数、*args、默认参数混用

**kwargs:可变字典长度(表示的就是形参中按照关键字传值把多余的传值以字典的方式呈现)

位置参数、*args、**kwargs三者的顺序必须是位置参数、*args、**kwargs

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def foo(x,*args,**kwargs):
     pass
foo (1,2,3,4,y=5,a=6,b=7) // 其中的x为12,3,4都给args,即args=(2,3,4),y=5,a=6,b=7以字典形式传给kwargs,即kwargs={'y':5,'a':6,'b':7}

python2参数顺序:必选参数、默认参数、可变参数,关键字参数。

python2中,默认参数必须在可变参数之前

Python3参数顺序:必选参数,默认参数,*args,**kwargs

python3中,*args也可以在默认参数前,谁在前谁优先拿到值

python2和python3相同的是:

1、必选参数必选在默认参数之前

2、关键字参数在最后

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值