python:动态参数*args

摘要:
Python有两种动态参数,*args和**kwargs。关键是一个星号和两个星号之间的区别,而不是args和kwargs名称之间的区别。事实上,你可以使用任何或任何东西。但与self一样,默认使用*args和**kwargs。Deffunc:pass*args星号表示收到任何参数。例如:deffunc:“”“*表示接收任意数量的参数。调用时,实际参数将打包成一个元组,并传递给实际参数:paramargs::return:”“printargsfinargs:printfunc运行结果:{'name':'kobe'}123hello[‘a','b','c']。可以看到,首先打印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

免责声明:文章转载自《python:动态参数*args》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇shell脚本之三:shell变量知识进阶与实践(转)C#调用C函数(DLL)传递参数问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python之高性能网络编程并发框架eventlet实例

http://blog.csdn.net/mingzznet/article/details/38388299 前言: 虽然 eventlet 封装成了非常类似标准线程库的形式,但线程和eventlet在实际并发执行流程仍然有明显区别。在没有出现 I/O 阻塞时,除非显式声明,否则当前正在执行的 eventlet 永远不会把 cpu 交给其他的 event...

DDD:策略模式如何结合动态表达式

企业应用中我们经常会遇到各种业务规则,针对这种规则,我们多数情况会采用策略模式,每种策略对应一个具体类和一个具体的配置界面。但是企业业务的规则经常变化,现有的策略随着时间的推移而不能满足要求,针对这种情况我们可以用动态表达式来解决。 动态表达式:在静态语言中动态的执行代码,目前可选的技术有:动态编译、Iron、Roslyn、内嵌小语言。 今天来测试一下内嵌...

python、pip、whl安装和使用

1 python的安装 首先,从python的官方网站 www.python.org下载需要的python版本,地址是这个: http://www.python.org/ftp/python/2.7.6/python-2.7.6.msi 然后,运行下载的MSI安装包,不需要更改任何默认设置,直接一路点“Next”即可完成安装: 默认会安装到C:Python...

python像操作文件一样操作内存的模块 StringIO

io流(io stream)流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。 输入输出(IO)是指计算机同任何外部设备之间的数据传递。常见的输入...

Python——XPath提取某个标签下所有文本

/text()获取指定标签下的文本内容,//text()获取指定标签下的文本内容,包括子标签下的文本内容,比较简单的是利用字符串相加: room_infos = li.xpath('.//a[@class="resblock-room"]/span//text()').extract() room_info = '' for i in room_info...

python 异常处理、进程

目录: 异常处理 python进程 python并发之多进程 一、异常处理(try...except...) 1、程序中难免出现错误,而错误分成两种: a.语法错误: View Code b.逻辑错误(逻辑错误) View Code 2、异常定义:异常就是程序运行时发生错误的信号。 在python中,错误触发的异常,是以异常追踪信息、异常类型、异常值三...