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(" ...
随机推荐
- Codeforces 377
简单说一下. A 搜索出任意一个剩余细胞个数的联通块.剩下的填X. B 二分加贪心加数据结构. /* * Problem: * Author: Shun Yao */ #include <str ...
- tomcat server获取用户的请求地址
当用户 与 tomcat之间 用 nginx做跳转时, HttpServletRequest 中的 getRemoteHost()方法获取到的只是nginx的地址,而不能拿到用户真正的请求地址 解决方 ...
- CentOS上firefox安装flash
CentOS下firefox安装flash说明 CentOS下自带了firefox,但没有flash插件的,按它自己的提示安装不成功,需要手动安装,如下: 1.打开flash官网,http://lab ...
- Web Service 与 EJB 的分布式的区别
EJB的分布式:一个业务逻辑可能会调用分布在多台服务器上的 EJB 组件,但是这么多的组件调用必须纳入一个事务范围之中.也就是说如果需要调用三个 EJB 组件,第一个调用成功,第二个调用成功,但第三个 ...
- Getting Started with Entity Framework 6 Code First using MVC 5--Contoso 大学
在本教程中使用的软件版本 Visual Studio 2013 年 4.5.NET 实体框架 (EntityFramework 6.1.0 NuGet 包) 6 Windows Azure SDK 2 ...
- Nginx 工作原理和优化、漏洞
1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(locat ...
- Himi的base64代码
// // DataHimi.cpp // Oh!MonsterMR // // Created by Himi on 12-3-8. // Copyright (c) 2012年 Augustimp ...
- Foreach与Random
[记忆贴] 1)foreach语句可以用于数据或者其他任何Iterable,但是并不意味着数组肯定也是一个Iterable,而任何自动包装也不会自动发生. package thinking.in.ja ...
- Java设计模式系列之动态代理模式(转载)
代理设计模式 定义:为其他对象提供一种代理以控制对这个对象的访问. 动态代理使用 java动态代理机制以巧妙的方式实现了代理模式的设计理念. 代理模式示例代码 public interface Sub ...
- GridControl表头全选操作实现之最优方法
突然发现很久没有写博客了. 昨天整了个Windows Live Writer 就为了以后好好写写博客. 所以,开始咯. 为了积累,也为了分享. 之前在博客园中看到一篇文章:<Winform分页控 ...