zoukankan      html  css  js  c++  java
  • [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,默认参数:初始已经有值,在调用时未更改使用默认值

    def exa(x=1)
        return x
     
    print exa() # 1
    print exa(2) # 2

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

    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:可变元组参数和可变字典参数

    *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  

    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为1,2,3,4,5都给args,即args=(2,3,4,5),y始终为1

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

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

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

    def foo(x,*args,**kwargs):
         pass
    foo (1,2,3,4,y=5,a=6,b=7) // 其中的x为1,2,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、关键字参数在最后

    参考:

    牛客网问题评论:https://www.nowcoder.com/questionTerminal/d899caec3dc54e60a9a238546e5b363a?toCommentId=2993542

  • 相关阅读:
    操作系统作业调度-操作系统
    评论--软件工程
    实验二 作业调度模拟程序
    复利计算评价博客
    构建之法(第四章读后感)
    复利计算--结对项目<04-11-2016> 1.0.0 lastest 阶段性完工~
    实验一 命令解释程序的编写
    构建之法(前三章读后感)
    实验0 了解和熟悉操作系统(操作系统)
    Scrum项目4.0
  • 原文地址:https://www.cnblogs.com/faithfu/p/10824491.html
Copyright © 2011-2022 走看看