zoukankan      html  css  js  c++  java
  • Python的不定长参数研究

     通过观察程序和运行结果我们发现,传参时将1传给了a,将2传给了b,将3,4,5传给了*args,将m=6,n=7,p=8传给了**kwargs。为什么是这样传参呢?*args和**kwargs又是什么呢?

    *args表示任何多个无名参数,它是一个tuple,所以将3,4,5传给了*args;

    **kwargs表示关键字参数,它是一个dict,所以将m=6,n=7,p=8传给了**kwargs。

    并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前。

    下面用代码给大家解释:

    以一个*开始的参数,代表一个任意长的元组:

     

    >>> def mul(*arg):
    ...     print arg
    ... 
    >>> mul(1,2,3,4,5,6,7,'hello','panfei')
    (1, 2, 3, 4, 5, 6, 7, 'hello', 'panfei') #一个元组
    >>>

     

    *********************************

     

    一个以**开始的参数,代表一个字典:

     

    >>> def mul2(**arg):
    ...     print arg
    ... 
    >>> mul2(a=11,b=444,c=888)
    {'a': 11, 'c': 888, 'b': 444} 一个字典
    >>>

     

    *********************************

     

    两种参数前者可以直接写实参,后者写成名=值的形式!

     

    ********************************

     下面看看 *args, **kwargs  的配合使用


     def foo(*args, **kwargs):
        print 'args = ', args
        print 'kwargs = ', kwargs
        print '---------------------------------------'
    
    if __name__ == '__main__':
        foo(1,2,3,4)
        foo(a=1,b=2,c=3)
        foo(1,2,3,4, a=1,b=2,c=3)
        foo('a', 1, None, a=1, b='2', c=3)
    输出结果如下:

    args =  (1, 2, 3, 4) 
    kwargs =  {} 
    --------------------------------------- 
    args =  () 
    kwargs =  {'a': 1, 'c': 3, 'b': 2} 
    --------------------------------------- 
    args =  (1, 2, 3, 4) 
    kwargs =  {'a': 1, 'c': 3, 'b': 2} 
    --------------------------------------- 
    args =  ('a', 1, None) 
    kwargs =  {'a': 1, 'c': 3, 'b': '2'} 
    ---------------------------------------

    可以看到,这两个是python中的可变参数。*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。

     参考:http://longzhiwen-478.blog.163.com/blog/static/29809749201392395923686/

  • 相关阅读:
    一句话解释数字签名。一句话解释数字证书
    KVC、KVO实现过程
    SSH基本概念和用途
    UICollectionView左对齐流水布局、右对齐流水布局
    Git命令学习笔记
    Xcode8插件安装
    Xcode日常使用
    dispatch_group_t 日常使用注意事项
    二分查找变种
    maven插件调试方法
  • 原文地址:https://www.cnblogs.com/xisheng/p/7299293.html
Copyright © 2011-2022 走看看