python(3)-函数动态参数
先来看一段代码
def show(*arg):
print(arg, type(arg)) if __name__ == "__main__":
show(1)
show(1,2,3,4,5)
现在执行一下,看看执行结果:
(1,) <class 'tuple'>
(1, 2, 3, 4, 5) <class 'tuple'>
可以看到,程序输出了两个元组,但神奇的是函数可以接受一个参数,也可以接受很多个参数,这就是python的动态参数。
那么我们来想一想,给show()函数传递一个列表,那么执行结果是什么呢?
([1, 2, 3, 4, 5, 6, 7],) <class 'tuple'>
可以看到,show()函数将整个列表当作一个元组的元素进行输出了;再给它传递一个字典进去,试试看:
({1: 2, 2: 3},) <class 'tuple'>
把字典也当作了元组中的一个元素输出了,所以可以看出 *arg 将传入的所有参数都转换成了元组。
接下来,再来看一段代码,我们把 * 换成 **,先传递一个数字进去:
def show(**arg):
print(arg, type(arg)) if __name__ == "__main__":
show(n1=11,n2=22)
{'n2': 22, 'n1': 11} <class 'dict'>
可以看到,传递的参数被转换成了字典
总结一下:
* 将所有传入的元素转换成元组
** 将所有传入的元素转换成字典
把这两种参数放在一起使用试试
def show(*arg, **kwargs):
print(arg, type(arg))
print(kwargs, type(kwargs)) if __name__ == "__main__":
show(11,22,33,n1=11,n2=22) (11, 22, 33) <class 'tuple'>
{'n1': 11, 'n2': 22} <class 'dict'>
这里有一点要注意的是:* 放在前面,**放在后面,顺序不可以错; 传递的参数也必须按照这个顺序,否则会报错。
那可不可以传列表和字典呢进去呢?
def show(*arg, **kwargs):
print(arg, type(arg))
print(kwargs, type(kwargs)) if __name__ == "__main__":
l = [11,22,33]
d = {'n1':88, 'n2':99}
show(*l, **d) (11, 22, 33) <class 'tuple'>
{'n2': 99, 'n1': 88} <class 'dict'>
在列表名前面一定要加*, 在字典前面要加**
python(3)-函数动态参数的更多相关文章
- 深入理解python中函数传递参数是值传递还是引用传递
深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...
- 讲讲python中函数的参数
python中函数的参数 形参:定义函数时代表函数的形式参数 实参:调用函数时传入的实际参数 列如: def f(x,y): # x,y形参 print(x, y) f(1, 2) # 1, 2 实参 ...
- 函数动态参数实现format
变量赋值一种是字符串格式化,一种是通过format的方式 1.字符串格式化 s="i am %s,age %d"%('Jasper',23)print(s) 打印输出:i am J ...
- python基础——函数的参数
python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...
- Python进阶-函数默认参数
Python进阶-函数默认参数 写在前面 如非特别说明,下文均基于Python3 一.默认参数 python为了简化函数的调用,提供了默认参数机制: def pow(x, n = 2): r = 1 ...
- Python中函数传递参数有四种形式
Python中函数传递参数有四种形式 fun1(a,b,c) fun2(a=1,b=2,c=3) fun3(*args) fun4(**kargs) 四种中最常见是前两种,基本上一般点的教程都会涉及, ...
- python函数动态参数详解
Python的动态参数: 1,参数前一个"*":在函数中会把传的参数转成一个元组. def func (*args): print(args) func(123,1,2,'a') ...
- python 函数动态参数,名称空间,global,nonlocal
##################################总结######################################动态参数 *args:位置参数动态传参,接收到的是元 ...
- python 函数 动态参数 和嵌套
1.动态参数 是可以接收任意的参数.一种方式, 1,位置的动态传参, 写法是: *参数名 接收的参数是tuple类型举个例子:def yue(*food): print(food)yue(" ...
随机推荐
- 第二百六十四天 how can I 坚持
现在上班闲的有点蛋疼,感觉没什么事,学不到什么东西. 到底要不要买房啊.也想买啊.愁人. 这辈子绝不会就这样. 睡觉.
- ES6学习小计
1.增加了for of语法,对应C#里的foreach,注意ES5中的 for in只会传递0,1,2.....序号,并且是字符for-of循环语句通过方法调用来遍历各种集合.数组.Maps对象.Se ...
- 成都Uber优步司机奖励政策(3月5日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Java transient、Volatile关键字
Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到主内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的同一 ...
- CodeForces 589A Email Aliases (匹配,水题)
题意:给定于所有的邮箱,都是由login@domain这样的形式构成,而且字符都是不区分大小写的. 我们有一种特殊类型的邮箱——@bmail.com, 这种邮箱除了不区分大小写外—— 1,'@'之前的 ...
- hibernate之saveorupdate()、save()、update()都有什么区别
saveorupdate()如果传入的对象在数据库中有就做update操作,如果没有就做save操作. save()在数据库中生成一条记录,如果数据库中有,会报错说有重复的记录. update()就是 ...
- Android布局优化之include、merge、ViewStub的使用
本文针对include.merge.ViewStub三个标签如何在布局复用.有效减少布局层级以及如何可以按需加载三个方面进行介绍的. 复用布局可以帮助我们创建一些可以重复使用的复杂布局.这种方式也意味 ...
- 浅谈IT员工管理
本人尽管还不是管理人员,但也管理过学弟们(不是同校.仅仅是工作中同事,为了好称呼叫学弟).也被管理着,工作也好多年了.今天又感而发.想来谈谈假设管理好员工(在此声明,我仅仅是发表个人意见哦.不要喷.哈 ...
- 一个无聊的实验:验证网站是否通过web容器还是微服务部署
一般来说一台web服务器会部署多个实例(且共享80端口),举个栗子例如nginx通常部署多个站点,每个站点都有自己的端口 例如 8091,8092之类的. 通过nginx进行代理.(前提微服务直接使用 ...
- cdoj 574 High-level ancients dfs序+线段树
High-level ancients Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/s ...