zoukankan      html  css  js  c++  java
  • 不定长数目参数,*args, **kwargs

    *args

    当函数参数数目不确定时,‘*’将一组位置参数打包成一个参数值容器。

    def demo(a, *args):
        print('a:', a)
        print('args:', args)
        print('type of args:', type(args))
        print('length of args:', len(args))
    
    demo(1, 2, 'hello', [])
    
    # 运行结果:
    # a: 1
    # args: (2, 'hello', [])
    # type of args: <class 'tuple'>
    # length of args: 3

    我们可以把程序中的*args改为*x、*b等等任意的名字,但是Python官方建议使用*args,这样其他人一看就知道这在干嘛。

    若*args不是在最后,则需要在参数传入时,需用关键字参数传入*args后面的参数名:

    def demo(*args, a):
        print('a:', a)
        print('args:', args)
        print('type of args:', type(args))
        print('length of args:', len(args))
    
    demo(1, 2, 'hello', [], a=3)
    
    # 运行结果:
    # a: 3
    # args: (1, 2, 'hello', [])
    # type of args: <class 'tuple'>
    # length of args: 4

    **kwargs

    **可以将参数收集到一个字典中,参数的名字是字典的键,对应参数的值是字典的值。

    def demo(a, **kwargs):
        print('a:', a)
        print('kwargs:', kwargs)
        print('type of kwargs:', type(kwargs))
    
    demo(0, x1=1, x2=2, x3=3)
    
    # 运行结果:
    # a: 0
    # kwargs: {'x1': 1, 'x2': 2, 'x3': 3}
    # type of kwargs: <class 'dict'>
    

    *args和**kwargs组合使用

    def demo(a, *args, **kwargs):
        print('a:', a)
        print('args:', args)
        print('kwargs:', kwargs)
    
    demo(0, 8, 9, x1=1, x2=2, x3=3)
    
    # 运行结果:
    # a: 0
    # args: (8, 9)
    # kwargs: {'x1': 1, 'x2': 2, 'x3': 3}
    

    在函数调用中使用*和**

    *和**不仅可以在函数定义中使用,还可以在函数调用中使用。在调用时使用就相当于pack(打包)和unpack(解包)。

    def demo(a, b, c):
        print('a:{}, b:{}, c:{}'.format(a, b, c))
    
    lst = [1, 2, 3]
    demo(*lst)
    
    # 运行结果:
    # a:1, b:2, c:3

    更简单的一个示例是关于print函数的:

    lst = [1, 2, 3]
    print(*lst)
    
    # 运行结果:
    # a:1, b:2, c:3

    最后举一个‘**’的例子

    def demo(a, b, c):
        print('a:{}, b:{}, c:{}'.format(a, b, c))
    
    score = {'a':90, 'b':85, 'c':76}
    demo(**score)
    
    # 运行结果:
    # a:90, b:85, c:76
    
  • 相关阅读:
    http://blog.csdn.net/steveguoshao/article/details/38414145
    http://www.tuicool.com/articles/EjMJNz
    http://jingyan.baidu.com/article/7f41ecec1b7a2e593d095ce6.html
    Linux 查看当前时间和修改系统时间
    http://m.blog.csdn.net/article/details?id=49132747
    http://www.cnblogs.com/nick-huang/p/4848843.html
    javaScript事件(一)事件流
    jQuery选择器
    超链接a的target属性
    html基础总结版
  • 原文地址:https://www.cnblogs.com/picassooo/p/12868603.html
Copyright © 2011-2022 走看看