python--基础学习(五)参数位置传递、关键字传递、包裹传递及解包裹
python系列均基于python3.4环境
1、位置传递和关键字传递
- 代码示例
- #位置传递
- def fun(a,b,c):
- print("a: {0}, b: {1}, c: {2}".format(a,b,c))
- fun(1,2,3) #参数传递,位置传递
- fun(c=3,a=1,b=2) #关键字传递,位置可以打乱
- fun(1,c=3,b=2,) #关键字传递和位置传递混合,位置参数需要在关键字参数之前
- 运行结果
- a: 1, b: 2, c: 3
- a: 1, b: 2, c: 3
- a: 1, b: 2, c: 3
- 结果分析:
(1)关键字传递是根据每个参数的名字传递参数。关键字并不用遵守位置的对应关系。
(2)关键字传递可以和位置传递混用。但位置参数要出现在关键字参数之前。
- 代码示例2:参数默认值
- def fun2(a,b,c=100):
- print("a: {0}, b: {1}, c: {2}".format(a,b,c))
- fun2(1,2) #传递2个值,c没有被赋值,所以c将使用默认值
- fun2(1,2,3) #c被赋值为1,将不使用默认值
- 运行结果
- a: 1, b: 2, c: 100
- a: 1, b: 2, c: 3
- 结果分析:
(1)如果该参数最终没有被传递值,将使用该默认值。
2、包裹位置传递
- 代码示例
- def func(*name):
- print(type(name))
- print(name)
- func(1,2,3)
- func(5,6,7,1,2,3)
- 运行结果
- <class 'tuple'>
- (1, 2, 3)
- <class 'tuple'>
- (5, 6, 7, 1, 2, 3)
- 结果分析:
(1)两次调用,尽管参数个数不同,都基于同一个func定义。在func的参数表中,所有的参数被name收集,根据位置合并成一个元组(tuple)。
(2)name是包裹位置传递所用的元组名,在定义func时,在name前加*号。
3、包裹关键字传递
- 代码示例
- def func(**dict):
- print(type(dict))
- print(dict)
- func(a=1,b=9)
- func(m=2,n=1,c=11)
- 运行结果
- <class 'dict'>
- {'b': 9, 'a': 1}
- <class 'dict'>
- {'n': 1, 'm': 2, 'c': 11}
- 结果分析
(1)dict是一个字典,收集所有的关键字,传递给函数func。参数dict是包裹关键字传递所用的字典,在dict前加**。
4、解包裹(包裹和解包裹并不是相反操作,是两个相对独立的过程。)
- 代码示例
- #解包裹
- def func(a,b,c):
- print(a,b,c)
- args = (1,2,3)
- func(*args)
- dict = {'a':1,'b':2,'c':3}
- func(**dict)
- 运行结果
- 1 2 3
- 1 2 3
- 结果分析:
(1)*和**,也可以在解包裹的时使用。
(2)在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用*,把args拆成分散的三个元素,分别传递给a,b,c。
(3)在传递词典dict时,让词典的每个键值对作为一个关键字传递给func。
5、结论
- 在定义或者调用参数时,参数的几种传递方式可以混合。基本原则是,先位置,再关键字,再包裹位置,再包裹关键字。
6、附:学习参考
python--基础学习(五)参数位置传递、关键字传递、包裹传递及解包裹的更多相关文章
- Python基础学习五
Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出 ...
- Python基础学习五 内置模块
time 模块 1 >>> import time 2 >>> time.time() 3 1491064723.808669 4 >>> # t ...
- 【Python基础学习五】列表,元祖,字典
1.列表(list) 列表是Python的一种内置数据类型,list是一种有序的集合,可以随时添加和删除其中的元素,就像动态数组一样.获取list中的元素用角标获取,角标可以使用正角标,也可以使用负角 ...
- Python基础学习五 内置函数
1.函数补充: 1)函数返回值return可以有多个 2)补充示例: nums = [0,1,2,3,4,5,6,7,8] #如何将list里面的元素变为字符串类型 new_nums = [str(x ...
- python基础学习10
python基础学习 内容概要 文件内光标的移动 文件数据修改 函数简介 函数语法结构 内容详情 文件内光标的移动 with open(r'路径','r',encoding='utf8') as f: ...
- python基础——函数的参数
python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...
- (一)python基础学习
根据廖雪峰老师的python教程写一些学习总结! Python基础学习 1.使用list和tuple (1)list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时 ...
- Day1 Python基础学习
一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...
- Day1 Python基础学习——概述、基本数据类型、流程控制
一.Python基础学习 一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编 ...
- Python基础学习总结(六)
8.函数 函数是带名字的代码块,用于完成具体的工作.def函数定义,指出函数名.定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参 ...
随机推荐
- jQuery1.9之后使用on()绑定 动态生成元素的 事件无效
来自互联网: 需要绑定a的父级元素(此元素必须为静态元素,不是后来动态生成的),然后设定on()方法的selector参数才行: $('p').on('mouseenter', 'a', functi ...
- 鼠标拖动在picturebox上画圆时
注意MouseDown MouseMove MouseUp三个事件: MouseMove事件中要实现实时绘制和下次绘制时自动清除重绘 需要: pictureBox1.Invalidate(); pi ...
- js 日期时间排序 数组
不多说直接show代码 var timeArr=[ {'id':'A01','date':'2016-04-20 23:22:11'}, {'id':'A02','date':'2016-04-21 ...
- 【Beta】七天屠蛟记
团队名字: 一不小心就火了 屠龙天团少年们: 031402504 陈逸超 (组长) 031402505 陈少铭 031402511 黄家俊 031402515 翁祖航 031402516 黄瑞钰 03 ...
- javascript读取xml文件
什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没 ...
- JS-抽奖系统-实现原理
有本事中奖的,过来找我换红包!!哈哈!! <meta charset="UTF-8"> <title>抽奖系统</title> <styl ...
- 在Application中集成Microsoft Translator服务之获取访问令牌
我在这里画了一张图来展示业务逻辑 在我们调用microsoft translator server之前需要获得令牌,而且这个令牌的有效期为10分钟.下表列出所需的参数和对于的说明 参数 描述 clie ...
- html5中常见的全局属性
1.contentEditable属性 1.功能说明 (1)功能:允许用户编辑元素中的内容 (2)说明:是一个布尔值,false是不能编辑,true为可编辑 该元素还隐藏一个inherit状态 也是 ...
- C# 4.0 之线程安全集合篇
资料:http://www.cnblogs.com/chengxiaohui/articles/5672768.html
- SameSite Cookie,防止 CSRF 攻击
因为 HTTP 协议是无状态的,所以很久以前的网站是没有登录这个概念的,直到网景发明 cookie 以后,网站才开始利用 cookie 记录用户的登录状态.cookie 是个好东西,但它很不安全,其中 ...