先来看一段代码

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)-函数动态参数的更多相关文章

  1. 深入理解python中函数传递参数是值传递还是引用传递

    深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...

  2. 讲讲python中函数的参数

    python中函数的参数 形参:定义函数时代表函数的形式参数 实参:调用函数时传入的实际参数 列如: def f(x,y): # x,y形参 print(x, y) f(1, 2) # 1, 2 实参 ...

  3. 函数动态参数实现format

    变量赋值一种是字符串格式化,一种是通过format的方式 1.字符串格式化 s="i am %s,age %d"%('Jasper',23)print(s) 打印输出:i am J ...

  4. python基础——函数的参数

    python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...

  5. Python进阶-函数默认参数

    Python进阶-函数默认参数 写在前面 如非特别说明,下文均基于Python3 一.默认参数 python为了简化函数的调用,提供了默认参数机制: def pow(x, n = 2): r = 1 ...

  6. Python中函数传递参数有四种形式

    Python中函数传递参数有四种形式 fun1(a,b,c) fun2(a=1,b=2,c=3) fun3(*args) fun4(**kargs) 四种中最常见是前两种,基本上一般点的教程都会涉及, ...

  7. python函数动态参数详解

    Python的动态参数: 1,参数前一个"*":在函数中会把传的参数转成一个元组. def func (*args): print(args) func(123,1,2,'a') ...

  8. python 函数动态参数,名称空间,global,nonlocal

    ##################################总结######################################动态参数 *args:位置参数动态传参,接收到的是元 ...

  9. python 函数 动态参数 和嵌套

    1.动态参数 是可以接收任意的参数.一种方式, 1,位置的动态传参, 写法是: *参数名 接收的参数是tuple类型举个例子:def yue(*food): print(food)yue(" ...

随机推荐

  1. Windows Server 2012 四个版本对比

    Windows Server 2012 有4种版本: Foundation, Essentials, Standard and Datacenter. 版本 Foundation Essentials ...

  2. 最全面的 MySQL 索引详解

    什么是索引? 1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中. 2.索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构 ...

  3. PHP操作cookie函数:setcookie()与setrawcookie()

    PHP setcookie() 函数向客户端发送一个 HTTP cookie.cookie 是由服务器发送到浏览器的变量.cookie 通常是服务器嵌入到用户计算机中的小文本文件.每当计算机通过浏览器 ...

  4. HDU 3072 Intelligence System (强连通分量)

    Intelligence System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  5. [iOS UI进阶 - 2.0] 彩票Demo v1.0

    A.需求 1.模仿“网易彩票”做出有5个导航页面和相应功能的Demo 2.v1.0 版本搭建基本框架   code source:https://github.com/hellovoidworld/H ...

  6. MySQL支持Emoji表情

    让MySQL支持Emoji表情,涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集. utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节, ...

  7. freemarker截取字符串subString

    转至:http://fengzhijie1103.iteye.com/blog/1142918 freemarker截取字符串其实和JAVA语法是差不多了,也有substring 方法       如 ...

  8. java命令行运行jar里的main类

    一般运行包含manifest的jar包,可以使用 java -jar <jar-file-name>.jar 如果jar里没有 manifest,则可以使用 java -cp foo.ja ...

  9. SQL Server中使用convert进行日期转换

    使用 CONVERT: CONVERT (data_type[(length)],expression[,style]) 参数 expression 是任何有效的 Microsoft® SQL Ser ...

  10. Python3爬虫学习

    学了几天python3,发现目前学到的与爬虫还是关系不大,所以现在准备爬虫和语言同步学习. 2016.8.9晚 先从最简单的开始,爬取指定url的所有内容: #encoding:UTF-8 impor ...