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 defunpackage(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包裹 函数_关于Python中包裹传参和解包裹的理解相关推荐

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

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

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

    那么打印的结果呢,是这样的: 根据函数的定义,我们知道,打印的第一行是传入的参数的类型(即type),根据打印结果,我们知道这是一个tuple,即元祖类型.也就是说,当我们在调用这个方法的时候,传入的 ...

  3. python isalnum函数_探究Python中isalnum()方法的使用

    探究Python中isalnum()方法的使用 isalnum()方法检查判断字符串是否包含字母数字字符. 语法 以下是isalnum()方法的语法: str.isa1num() 参数 NA 返回值 ...

  4. python pos函数_使用python+sklearn实现特征提取

    sklearn.feature_extraction模块可用于以机器学习算法支持的格式从原始数据集(如文本和图像)中提取特征.**注意:**特征提取与特征选择有很大不同:前者是将任意数据(例如文本或图 ...

  5. python deepcopy函数_用Python解数独[6]:递归获得最终答案

    目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...

  6. python 微积分 函数_用Python学微积分(2)---复合函数

    函数的复合(Composition) 定义:设函数y=f(u)和u=g(x)u=g(x),则函数y=f[g(x)]称为由y=f(u)和u=g(x)复合而成的复合函数,其中函数y=f(u)常常称为外函数 ...

  7. python decimal函数_(转)python学习笔记5--decimal

    原文:https://blog.csdn.net/lemonwyc/article/details/37583125 上一节提到了除了基本类型之外的decimal,这节就学习下. 查看python3. ...

  8. python getattr函数_[转]Python中的getattr()函数详解

    看了下函数本身的doc getattr(object, name[, default]) -> value Get a named attribute from an object; getat ...

  9. python 编译函数_在Python的Django框架中编写编译函数

    当遇到一个模板标签(template tag)时,模板解析器就会把标签包含的内容,以及模板解析器自己作为参数调用一个python函数. 这个函数负责返回一个和当前模板标签内容相对应的节点(Node)的 ...

最新文章

  1. mn之间的回文数c语言,c语言描述回文数的三种算法
  2. 学python有必要买书吗-要不要学python
  3. DataKeyNames
  4. 英语语法最终珍藏版笔记-18what 从句的小结
  5. mysql profiles清空_MYSQL 使用show profiles 分析性能
  6. 第二十四期:揭秘:为什么电脑越用越卡 大型破案现场
  7. 看门狗性能软件测试,《看门狗:军团》PC版性能测试 不建议光追,优化极差
  8. vue 声明周期函数_vue-router路由守卫-上
  9. openstack instance bootmgr is missing 问题 修复
  10. 怎么用PDF转换器将PDF文件转成txt
  11. AB罗克韦尔-pid教程
  12. 波形发生器c语言编程,C语言_源代码-波形发生器_程序清单.doc
  13. win10基于QT开发手机安卓App
  14. linux下编译ts工程,linux下搭建生成HLS所需的.ts和.m3u8文件
  15. 高级语言编译的六个过程,解释程序和编译程序的区别
  16. 大数据干货,1个案例讲清楚精准营销!
  17. 将淘宝爬取的数据写入Excel表格
  18. 艾利特代理商—艾利特EC63机器人安装教程
  19. C2039 Error: WriteHuge : is not a member of CFile
  20. 租用国内的云主机的话,阿里云和盛大云,哪个更好?

热门文章

  1. windows CMD 下无法跳转指定盘下文件夹的问题【已解决】
  2. 对于企业开发中工作流组件的思考与想法
  3. 如何禁止复制电脑文档到U盘或其它移动设备
  4. Linux中的HOME目录和home目录???
  5. chrome浏览器插件推荐
  6. 2022年CSP-j,s总结
  7. 工业现场为何必须使用工业环网交换机?
  8. React —— React 中的JSX语法
  9. MySql的安装与连接,客户端Navicate
  10. ROS | URDF模型—阿克曼(Ackermann)四轮小车模型