关于Python中包裹传参和解包裹的理解

1.包裹传参 首先思考一个问题:为什么要有包裹传参?原因包括但不仅限于以下两点:①不确定参数的个数。②希望函数定义的更加松散灵活 包裹传参分两种:包裹位置传参和包裹关键字传参。先看包裹位置传参: 在这里,如果先说定义肯定有些晦涩难懂,我们直接看下面这个例子吧! 复制代码 1 def package_position(*all_arguments): 2 print(type(all_arguments)) 3 print(all_arguments) 复制代码 这里定义了一个函数package_position(),其传入参数与一般的参数不一样,前面有一个*号,表明这是一个包裹,接下来调用的时候如下: 复制代码 1 package_position(1, 4, 6) 2 package_position(5, 6, 7, 1, 2, 3) 复制代码 那么打印的结果呢,是这样的: 根据函数的定义,我们知道,打印的第一行是传入的参数的类型(即type),根据打印结果,我们知道这是一个tuple,即元祖类型。也就是说,当我们在调用这个方法的时候,传入的参数1,4,6,最后全部包在一起,封装成一个tuple,传递给函数内部。打印的第二行,就是该元祖的内容。然后,根据打印结果的第二行,我们可以知道,这就是我们在调用时传入的1,4,6。 总结一下:在调用package_position()时,所有的数据都根据先后顺序,收集到一个元祖,在函数内部,我们可以通过元祖来读取传入的数据,这就是包裹位置传参。 再来看看什么时包裹关键字传参: 有了以上包裹位置传参,那么包裹关键字传参就不多说了,还是直接看例子: 复制代码 1 def package_keyword(**all_arguments): 2 print(type(all_arguments)) 3 print(all_arguments) 4 5 package_keyword(a = 1, b = 9) 6 package_keyword(m = 2, n = 1, c = 11) 复制代码 与上面一个例子类似,当函数调用时,所有参数会收集到一个数据容器里。只不过,在包裹关键字传递的时候,,数据容器不再是一个元祖,而时一个字典。每个关键字形式的参数调用,都会成为字典的一个元素。参数名为元素的键,而数据成为元素的值。字典all_arguments收集了所有的参数,把数据传递给函数使用。为了提醒,参数all_arguments是包裹关键字传递所有的字典,因此在all_arguments前加**。打印结果如下: 2.解包裹 除了用于函数定义,*和**还可用于函数调用。这时候,两者是为了实现一种叫作解包裹(unpacking)的语法。解包裹允许我们把一个数据容器传递给函数,再自动地分解为各个参数。需要注意的是,包裹传参和解包裹并不是相反操作,而是两个相对独立的功能(但给人的感觉就是两个相反的操作)。下面是解包裹的一个例子: 复制代码 1 def unpackage(a, b, c): 2 print(a, b, c) 3 4 args = (1, 3, 4) 5 unpackage(*args) 6 7 args = {"a":1, "b":2, "c":3} 8 unpackage(**args) 复制代码 根据上面的代码,估计读者也大概知道了关于解包裹的概念。我们调用函数时传递的是一个元祖,按照基本传参的方式,一个元祖是无法和三个参数对应上的。但我们通过在args前加上*符号,来提醒Python,我想把元祖拆成三个元素,每一个元素对应函数的一个位置参数。于是,元祖的三个元素分别赋予了三个参数。 相应的,词典也可用于解包裹(上述代码第7,8行)。在传递词典args时,让词典的每个键值对作为一个关键字传递给函数。 标签: Python 好文要顶 关注我 收藏该文 HeZhengfa 关注 - 1 粉丝 - 1 +加关注 0 0 « 上一篇:对汉诺塔递归算法的理解(图解,附完整代码实现) posted @ 2019-01-20 22:41 HeZhengfa 阅读(58) 评论(0) 编辑 收藏 刷新评论刷新页面返回顶部 注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。 【推荐】超50万VC++源码: 大型组态工控、电力仿真CAD与GIS源码库! 相关博文: · 探究CSS中的包裹性 · 关于找人物包裹地址方法 · 双击包裹物品自动解包设置方法_传奇版本技术 · python 模块包裹 · css包裹性 最新新闻: · 如何“择业”?细胞也关心这问题 · 微软退出手机OS舞台,真的很屈辱吗? · 消息称猫眼娱乐延长IPO时间表 · 爆红十年后,谁“切”了苹果? · 度过最艰难痛苦的一年,特斯拉的未来会好吗 » 更多新闻... 公告 昵称:HeZhengfa 园龄:9个月 粉丝:1 关注:1 +加关注 < 2019年1月 > 日 一 二 三 四 五 六 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 搜索 常用链接 我的随笔 我的评论 我的参与 最新评论 我的标签 我的标签 Python(1) 队列(1) 链式结构(1) 数据结构(1) 算法(1) 随笔分类 基础数据结构(1) 随笔档案 2019年1月 (2) 2018年12月 (1) 阅读排行榜 1. 数据结构代码实现之队列的链表实现(C/C++)(115) 2. 关于Python中包裹传参和解包裹的理解(59) 3. 对汉诺塔递归算法的理解(图解,附完整代码实现)(17)https://www.cnblogs.com/HeZhengfa/p/10296508.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信