zoukankan      html  css  js  c++  java
  • python 参数的组合

    现在我们知道python定义函数的参数类型有:
    必选参数

    默认参数

    可变参数

    关键字参数

    但是在我们日常中我们是可以组合使用这些参数的:但是使用的时候,参数定义是有顺序的

    定义的顺序必须是:必选参数,默认参数,可变参数,关键字参数

    1,17,68);font-style:normal;font-varian比如定义一个函数,包含上述4种参数:
    def func(a, b, c=0, *args, **kw):
    print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw
    在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。
    >>> func(1, 2)
    a = 1 b = 2 c = 0 args = () kw = {}
    >>> func(1, 2, c=3)
    a = 1 b = 2 c = 3 args = () kw = {}
    >>> func(1, 2, 3, 'a', 'b')
    a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
    >>> func(1, 2, 3, 'a', 'b', x=99)
    a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
    最神奇的是通过一个tuple和dict,你也可以调用该函数:
    >>> args = (1, 2, 3, 4)
    >>> kw = {'x': 99}
    >>> func(*args, **kw)
    a = 1 b = 2 c = 3 args = (4,) kw = {'x': 99}
    所以,对于任意函数,都可以通过类似 func(*args, **kw) 的形式调用它,无论它的参数是如何定
    义的。
    小结
    Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。
    默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误!
    要注意定义可变参数和关键字参数的语法:
    *args 是可变参数,args接收的是一个tuple;
    **kw 是关键字参数,kw接收的是一个dict。
    以及调用函数时如何传入可变参数和关键字参数的语法:
    可变参数既可以直接传入: func(1, 2, 3) ,又可以先组装list或tuple,再通过 *args
    入: func(*(1, 2, 3))
    关键字参数既可以直接传入: func(a=1, b=2) ,又可以先组装dict,再通过 **kw
    入: func(**{'a': 1, 'b': 2})
    使用 *args **kw 是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法

  • 相关阅读:
    Network (poj1144)
    C. Hongcow Builds A Nation
    ZYB loves Xor I(hud5269)
    D. Chloe and pleasant prizes
    Game(hdu5218)
    约瑟夫环的递推方法
    Misaki's Kiss again(hdu5175)
    Exploration(hdu5222)
    B. Arpa's weak amphitheater and Mehrdad's valuable Hoses
    C. Arpa's loud Owf and Mehrdad's evil plan
  • 原文地址:https://www.cnblogs.com/smail-bao/p/5619816.html
Copyright © 2011-2022 走看看