zoukankan      html  css  js  c++  java
  • python:动态参数*args

    动态参数

      顾名思义,动态参数就是传入的参数的个数是动态的,可以是1个、2个到任意个,还可以是0个。在不需要的时候,你完全可以忽略动态函数,不用给它传递任何值。

    Python的动态参数有两种,分别是*args**kwargs,这里面的关键是一个和两个星号的区别,而不是argskwargs在名字上的区别,实际上你可以使用*any**whatever的方式。但就如self一样,默认大家都使用*args**kwargs

    注意:动态参数,必须放在所有的位置参数和默认参数后面!

    def func(name, age, sex='male', *args, **kwargs):
        pass

    *args

    一个星号表示接收任意个参数。调用时,会将实际参数打包成一个元组传入形式参数。如果参数是个列表,会将整个列表当做一个参数传入。例如:

    def func(*args):
        """
        *表示接收任意个数量的参数,调用时会将实际参数打包为一个元组传入实参
        :param args:
        :return:
        """
        print args
    
        for i in args:
            print i
    
    
    func({'name': 'kobe'}, 123, 'hello', ['a', 'b', 'c'])

    运行结果:

    ({'name': 'kobe'}, 123, 'hello', ['a', 'b', 'c'])
    {'name': 'kobe'}
    123
    hello
    ['a', 'b', 'c']

    可以看到,先打印了args参数,是一个元组,再分别打印了传入的每个参数。

    有时候我们传入一个列表,本意是希望将列表中的所有元素都当做参数传递进去,这里直接将['a', 'b', 'c']看做一个整体了,怎么办?

    其实只需要在调用时前面加一个*号就能实现将列表中的每个元素传递进去了。

    其实不光列表,任何序列类型数据对象,比如字符串、元组都可以通过这种方式将内部元素逐一作为参数,传递给函数。而字典,则会将所有的key逐一传递进去。

    def func(*args):
        """
        *表示接收任意个数量的参数,调用时会将实际参数打包为一个元组传入实参
        :param args:
        :return:
        """
        for i in args:
            print i
    
    
    func(*['a', 'b', 'c'])

    输出结果:

    a
    b
    c

    特别的,调用时只能有一个参数前添加*号,且必须放在最后面

    def func(*args):
        """
        *表示接收任意个数量的参数,调用时会将实际参数打包为一个元组传入实参
        :param args:
        :return:
        """
        for i in args:
            print i
    
    
    func(123, 'hello', ['a', 'b', 'c'], *{'name': 'kobe', 'age': 41})

    输出:将字典的key值作为参数传入了

    123
    hello
    ['a', 'b', 'c']
    age
    name
  • 相关阅读:
    常用问题处理
    modelsim仿真中遇到的问题
    modelsim编译altera的库
    verilog系统函数用法
    123
    MATLAB实现截位的问题
    加减与有符号和无符号库
    状态机中的RAM注意的问题--减少扇出的办法
    串口的时序
    L230 RF可靠性测试-RF指标
  • 原文地址:https://www.cnblogs.com/gcgc/p/11426478.html
Copyright © 2011-2022 走看看