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. 【Excle数据透视】如何隐藏数据透视表字段的分类汇总

    如下图:是显示数据透视表的分类汇总 那么我们现在想弄成以下这样,不显示分类汇总 如何操作呢? 步骤 单击数据透视表任意单元格→数据透视表工具→设计→分类汇总→不显示分类汇总 ***显示分类汇总*** ...

  2. C# 接口的隐式与显示实现说明

    以前在用到接口时,从来没注意到接口分为隐式实现与显示实现.昨天在浏览博客时看到相关内容,现在根据自己的理解记录一下,方便日后碰到的时候温习温习. 通俗的来讲,"显示接口实现"就是使 ...

  3. asp.net core mvc视频A:笔记2-2.接收数据

    传参方式一:使用内置方法传递 运行结果 其他获取方法 Session对象在HttpContext中 启用Session 使用Session 运行演示 传参方式二:数据绑定 普通类型(string).自 ...

  4. [j2ee]java中的xml操作

    一.XML简单介绍      xml是可扩展标记语言,主要用来标记数据.定义数据类型,很适合万维网传输. xml特点: xml是一种标记语言.非常类似HTML xml的设计宗旨是数据传输,而不是显示数 ...

  5. Java后台代码调用Spring的@Service Bean的方式

    比如:在我的project中有一个类CompassIndexOperation,以: @Service("CompassIndexOperation") @Transactiona ...

  6. parcel 入门

    https://www.gitbook.com/book/dragon8github/fuck-parcel/details

  7. Verilog 浮点数运算模块

    算法中常常会到浮点数运算,而浮点数的处理常常是Verilog初学中常常遇到的问题.以下将就一个简单的例子说明Verilog中浮点数运算处理. 在JPEG图像压缩时遇到色彩空间变换的问题,将YCbCr转 ...

  8. 【Python + selenium】之BSTestRunner:NameError: name 'unicode' is not defined

    参考文章:<python3.6 :NameError: name 'unicode' is not defined>

  9. mybaits返回插入成功后的自增值

    mybaits返回插入成功后的自增值 在项目中,我们经常遇到这样的情况:insert语句成功后,需要自增的id值,这个时候,我们可以通过mybatis的 useGeneratedKeys 来实现,具体 ...

  10. linux 给用户修改权限

    #添加一个用户 useradd xiaoming #设置密码 passwd xiaoming 回程 //设置密码就行了 #把用户修改成root权限 vi /etc/passwd #找到xiaoming ...