func( *tuple_grp_nonkw_args, **dict_grp_kw_args )

在编程的过程中,我们可能会遇到函数参数个数不固定的情况。这时就需要使用可变长度的函数参数来实现我们的功能。在Python中,有两种变长参数,分别是元组(非关键字参数)和字典(关键字参数).

1. 元组可变长参数

当函数调用中包括一个元组变长参数*tuple_grp_nonkw_args时,除去前面固定位置参数和关键字参数的其余参数将按顺序插入一个元组进行访问.

def fun_test(positional_arg,keyword_arg="default",*tuple_arg):
print "positional arg: ", positional_arg
print "key word arg: ", keyword_arg
for each_additional_arg in tuple_arg:
print "additional_arg: ",each_additional_arg fun_test(1) positional arg: 1
key word arg: default fun_test(1,2) positional arg: 1
key word arg: 2 fun_test(1,2,3) positional arg: 1
key word arg: 2
additional_arg: 3 fun_test(1,2,3,"a") positional arg: 1
key word arg: 2
additional_arg: 3
additional_arg: a

2.字典可变长参数

字典变长参数中,额外的关键字参数被放入了一个字典进行使用。字典中,键为参数名,值为相应的参数值。其表示方式是放在函数参数最后的**开头的参数,如**dict_grp_kw_args.

def fun_test2(positional_arg,keyword_arg="default",**dict_arg):
print "positional arg: ", positional_arg
print "key word arg: ", keyword_arg
for k,v in dict_arg.iteritems():
print "dict arg: %s = %s" %(k,v) fun_test2(1) positional arg: 1
key word arg: default fun_test2(1,2) positional arg: 1
key word arg: 2 fun_test2(1,2,x1=3) positional arg: 1
key word arg: 2
dict arg: x1 = 3 fun_test2(1,2,x1=3,x2="test") positional arg: 1
key word arg: 2
dict arg: x2 = test
dict arg: x1 = 3
#c在这里是一个tuple,我们在调用funcD的时候,至少要传递2个参数,2个以上的参数,都放到c里了,如果只有两个参数,那么c就是一个empty tuple

def funcD(a, b, *c):
print a
print b
print "length of c is: %d " % len(c)
print c funcD(1,2,3,4,5,6,7) 1
2
length of c is: 5
(3, 4, 5, 6, 7) #b是一个dict对象实例,它接受了关键字参数b,c,d
def funcF(a, **b):
print a
for x in b:
print x + ": " + str(b[x]) funcF(100,b=1,c="a",d=3) 100
c: a
b: 1
d: 3

 tupe_args=(3,4,"five")

 dict_args={"x1":1,"x2":"test"}

 fun_test(1,2,*tupe_args)

 positional arg: 1
 key word arg: 2
 additional_arg: 3
 additional_arg: 4
 additional_arg: five

 fun_test2(1,2,**dict_args)

 positional arg: 1
 key word arg: 2
 dict arg: x2 = test
 dict arg: x1 = 1

3.注意

函数调用的完整表达形式为:
func( positional_args, keyword_args, *tuple_grp_nonkw_args, **dict_grp_kw_args )

在使用的过程中,所有参数都是可选的,但应当注意的是:上面四种参数的位置是不可调换的!

Python 可变长度函数参数的更多相关文章

  1. (转)python中函数参数中如果带有默认参数list的特殊情况

    在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]):     for i in range(x):         ...

  2. python中函数参数的引用方式

    值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方 ...

  3. Python基础-函数参数

    Python基础-函数参数 写在前面 如非特别说明,下文均基于Python3 摘要 本文详细介绍了函数的各种形参类型,包括位置参数,默认参数值,关键字参数,任意参数列表,强制关键字参数:也介绍了调用函 ...

  4. Python之函数&参数&参数解构

    1.1函数定义 def 函数名(参数列表): 函数体(代码块) [return 返回值] p 函数名就是标识符,命名要求一样 语句块必须缩进,约定4个空格 Python的函数没有return语句,隐式 ...

  5. python中函数参数

    默认参数注意点 优点:灵活,当没有指定与形参对应的实参时就会使用默认参数 缺陷: 例子: >>> def h(m, l=[]):                    #默认参数时列 ...

  6. 对Python中函数参数类型及排序问题,三个方面的总结

    Python中函数的参数问题有点复杂,主要是因为参数类型问题导致的情况比较多,下面来分析一下. 参数类型:缺省参数,关键字参数,不定长位置参数,不定长关键字参数. 其实总共可以分为 位置参数和关键字参 ...

  7. 第5.2节 Python的函数参数收集

    函数的参数使用除了常规的位置参数和关键字参数外,还支持可变个数的函数参数,这种支持可变个数的参数方法称为参数收集,对应的参数称为收集参数. 一.参数收集的定义 Python的函数支持可变不定数量的参数 ...

  8. python的函数参数传递方式

    python的一切数据类型都是对象.但是python的对象分为不可变对象和可变对象.python的变量是引用,对python变量的赋值是引用去绑定该对象. 可变对象的数据发生改变,例如列表和字典,引用 ...

  9. python 使用函数参数注解

    使用函数参数注解是一个很好的办法,它能提示程序员应该怎样正确使用这个函数. 函数注解只存储在函数的annotations 属性中

随机推荐

  1. HTML to PDF pechkin

    1. Goto Nuget 下载 Pechkin 控件 2. 创建需要打印的的PDF controller 和 Action, 这里会调用其他页面的内容进行打印. public ActionResul ...

  2. DialogFragment创建默认dialog

    代码地址如下:http://www.demodashi.com/demo/12228.html 记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 前言 在我们项目的进行中不可避免 ...

  3. Effective C++ Item 25 考虑写出一个不抛异常的swap函数

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:当std::swap对你的类型效率不高时,提供一个swap成员函数,并确定这个函数不抛 ...

  4. linux本地文件上传之RZ/SZ和sftp

    将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,但是很多Linux系统初始并没有这两个命令. 1.软件安装 (1)编译安装 root 账号登陆后, ...

  5. Iterating elements using NightWatchJS

    1) used the following strategy to iterate over DOM elements using Nightwatch: // Executing a functio ...

  6. My sql 5.7 安装及错误解决

    安装MYSQL5.7时,一直不能启动服务,找了N多办法,一直在围绕MY.INI文件来改来改去. 实际情况是,PATH路径设置完成后(计算机——属性—高级设置-环境变量——path),要执行以下命令初始 ...

  7. Linux 在不重启的情况下识别新挂载的磁盘

    在使用 Linux 时,有时候会因为初始时磁盘空间分配估计不足,使用中需要将挂载点扩容的情况,这就需要我们挂载新的磁盘.但是如果我们在 Linux 运行过程中挂载磁盘, Linux 又不能在不重启的情 ...

  8. systemctl使用说明

    # systemctl #输出已激活单元 # systemctl list-units #输出已激活单元 # systemctl --failed #输出运行失败的单元 # systemctl lis ...

  9. 首页底部菜单FragmentTabHost的使用

    一般现在的菜单都是底部FragmentTabHost,切换Fragment来实现的,今天我们就使用这个来看看如何实现的 首先是布局文件 <?xml version="1.0" ...

  10. iPhone缓存网络数据

    本文转载至 http://blog.csdn.net/wwang196988/article/details/7542918   在iPhone应用程序中,我们经常要用去网络下载一些文件,比如xml, ...