那么打印的结果呢,是这样的:

根据函数的定义,我们知道,打印的第一行是传入的参数的类型(即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时,让词典的每个键值对作为一个关键字传递给函数。

作者:HeZhengfa

原文:https://www.cnblogs.com/HeZhengfa/p/10296508.html

python包裹和运费_关于Python中包裹传参和解包裹的理解相关推荐

  1. python解包裹_关于Python中包裹传参和解包裹的理解

    原标题:关于Python中包裹传参和解包裹的理解 1.包裹传参 首先思考一个问题:为什么要有包裹传参?原因包括但不仅限于以下两点:①不确定参数的个数.②希望函数定义的更加松散灵活 包裹传参分两种:包裹 ...

  2. python包裹 函数_关于Python中包裹传参和解包裹的理解

    1.包裹传参 首先思考一个问题:为什么要有包裹传参?原因包括但不仅限于以下两点:①不确定参数的个数.②希望函数定义的更加松散灵活 包裹传参分两种:包裹位置传参和包裹关键字传参.先看包裹位置传参: 在这 ...

  3. python包裹和运费_这个Python库真的太好用了,10行代码就能轻松搞定目标检测

    目标检测是指计算机和软件系统对图像或场景中的目标进行定位和识别的任务. 目标检测已广泛应用于人脸检测.车辆检测.人流量统计.网络图像.安防系统和无人驾驶等多个领域. 早期目标检测的实现基于经典算法,比 ...

  4. 在Java中动态传参调用Python脚本

    最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写java接口和复用已有的python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称 ...

  5. shell脚本中编写SQL中 以传参(${accdate})的方式 动态:求 前12个月的日期和求 前一周(7天的日期)

    shell脚本中 编写SQL中 以传参(${accdate})的方式 动态 求 前12个月的日期 CAST(CAST(DATE_FORMAT(DATE_SUB(from_unixtime(unix_t ...

  6. C语言与java中函数传参比较

    C语言与java中函数传参比较 首先先说结论:C语言中参数传递有值传递,地址传递,引用传递.但java中的参数传递只有值传递 1.C语言中的参数传递 1>值传递 值传递非常好理解,其实就是对函数 ...

  7. python 打印数组变量_使用Python将数组的元素导出到变量中(unpacking)

    下面就为大家分享一篇使用Python将数组的元素导出到变量中(unpacking),具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 最近工作中遇到一个问题,需要利用Python将数组(list ...

  8. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  9. python数组相减_对Python 中矩阵或者数组相减的法则详解

    对Python 中矩阵或者数组相减的法则详解 最近在做编程练习,发现有些结果的值与答案相差较大,通过分析比较得出结论,大概过程如下: 定义了一个计算损失的函数: def error(yhat,labe ...

最新文章

  1. Python3面向对象编程的三大特性 封装、继承、多态
  2. ICML2020 | GCNII:使用初始残差和恒等映射解决过度平滑
  3. 关于编码、unicode、utf-8的讨论
  4. Java实现Facebook第三方登录
  5. 高效的企业测试-工作流和代码质量(4/6)
  6. javaweb 常用jar包_使用javaweb写一个登录案例
  7. f分布表完整图_【教育统计答疑】如何理解正态分布、均值分布、^2分布、t分布和F分布...
  8. git 查看修改用户名
  9. Machine Learning Mastery 博客文章翻译:深度学习与 Keras
  10. numpy-np.concatenate
  11. Python-振动信号加入噪声-代码实现
  12. 终极单词index 排序 M-N
  13. 西工大计算机学院李春科,西北工业大学“青春逐梦 激情飞扬”2014友谊校区元旦晚会成功举办...
  14. not discrete but [0, 1]. Specify a discrete sample time in
  15. 团队管理的四大挑战——留人篇
  16. MySQL 连接挂死了!该如何排查?
  17. react与mobx搭配时如何缓存mobx的数据(刷新之后保存状态)
  18. cisco 华三 对接_h3c开启trunk口与思科设备相互连接
  19. Pyqt5 pandas matplotlib network自用操作
  20. 打码平台是如何运作的?再谈验证码安全

热门文章

  1. springboot jpa 配置多数据源报错解决 Consider defining a bean named ‘entityManagerFactory‘
  2. 用蒙特卡洛法计算阴影部分面积
  3. QQ天气H5-前端完整解析
  4. LOL-国外的灵魂画师
  5. 论文阅读 2DPASS: 2D Priors Assisted SemanticSegmentation on LiDAR Point Clouds LiDAR
  6. Linux下经常出现permission denied,原因是由于权限不足,
  7. 5000字 大数据时代读书笔记_读书笔记 大数据时代
  8. 程序退出后的进程资源回收
  9. canda 常用命令
  10. linux tail 内容过滤,Linux命令 tail 加过滤功能,linuxtail