【飘逸的Python】 传递可变长度参数
来源:互联网 发布:druid log4j 打印sql 编辑:程序博客网 时间:2024/04/29 10:47
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50419402
熟悉C/C++的童鞋对下面这个函数肯定不陌生:
int main( int argc, char *argv[] ) /* 带参数形式 */{ ... return 0;}
用户启动程序中,可以传递多个参数,其中argc是参数的个数,而argv字符指针数组中就保存了指向各个参数的指针。这样,就向程序中传递可变个数的参数。
那么,Python中有没有这样的功能呢?答案是肯定的。Python传递可变长度参数有两种形式,一种是非关键字可变长度参数,一种是关键字变量参数,下面具体讲述这两种方式。
非关键字可变长度参数
通常使用星号(*)声明一个非关键字可变长度参数,该参数必须在普通参数和默认参数之后。这样的函数声明通常如下:
def function_name([formal_args], *multi_args)
当函数被调用的时候,运行环境先将所有的形参赋值给函数声明中对应的局部变量,然后将剩下的非关键字参数放入一个元祖中供函数内部访问。所以实质上非关键字可变长度参数就是传递一个元组,将所有额外的参数添加到变量元组中而不会产生TypeError异常。
下面,我们看一个如何使用非关键字可变长度参数的例子
def multi_non_keyword_args(*args): '非关键字可变长参数实例' print type(args); for item in args: print item# 调用multi_non_keyword_args("arg1", "arg2", "arg3")
输出如下:
<type 'tuple'>arg1arg2arg3
关键字可变长度参数
通常使用两个星号(**)声明关键字可变长参数,该参数也必须放在普通参数、默认参数和非关键字可变长度参数之后。这样的函数声明通常如下:
def function_name([formal_args], *multi_args1, **multi_args2)
当函数被调用的时候,运行环境先将所有的形参赋值给函数声明中对应的局部变量,如果存在,再将剩下的非关键字参数放入一个元祖。最后把剩下的关键字参数放入一个字典中传入函数内部。
下面,展示一个关键字可变长参数的例子:
def multi_keyword_args(*args1, **args2): '关键字可变长参数实例' print type(args2) print args2multi_keyword_args("arg1", "arg2", key1="key1", key2="key2")
输出:
<type 'dict'>{'key2': 'key2', 'key1': 'key1'}
0 0
- 【飘逸的Python】 传递可变长度参数
- Python可变长度的参数
- 【转】Python可变长度的函数参数
- python 可变参数传递
- C语言(函数传递可变长度的参数列表)va_arg
- 飘逸的python - 鲜为人知的参数
- Python 传递可变长参数
- Python中函数的参数传递与可变长参数
- Python中函数的参数传递与可变长参数
- Python中函数的参数传递与可变长参数
- 可变长度参数的实现
- JAVA 可变长度的参数
- 飘逸的python - 中文编码长度有趣的现象
- Python中函数个数可变参数的传递
- 可变数量参数的传递
- 可变参数传递的方法
- Java 可变参数的传递
- python的可变参数
- 关于JavaScript修改CSS样式
- Class Linearization in Scala
- html meta X-UA-Compatible 无效
- 装修日记
- TOMCAT与电脑时间差异8小时的解决办法
- 【飘逸的Python】 传递可变长度参数
- mysql sp
- 扣丁学堂——SQLite
- uva11054
- DW1000 AUTO ack的说明
- 安卓瀑布流适应ScrollView标签控件
- JMM--(2)重排序
- SystemUI之功能介绍和UI布局实现
- hibernate的 lazy 和 fetch 一般配置