《Python学习手册 第五版》 -第18章 参数
在函数的定义和调用中,参数是使用最多喝最频繁的,本章内容就是围绕函数的参数进行讲解
本章重点内容如下:
1、参数的传递
1)不可变得参数传递
2)可变得参数传递
2、参数的匹配模式
1)位置次序:从左至右进行匹配
2)关键字参数:通过参数名进行匹配
3)默认值参数:为没有传入值得可选参数指定参数值
4)可变长参数收集:收集任意多的基于位置或关键字的参数
5)可变长参数解包:传入任意多的基于位置或关键字的参数
6)Keyword-only参数:必须按照名称传递的参数
其中第二部分是本章的重中之重,接下来进行详细讲解
1、参数的传递
1)不可变得参数传递
顾名思义,就是将一个参数传递给函数,不管函数如何操作,传递的参数是不会变的,及时函数内部有同样的变量名称,针对这一点,通过一下代码示例说明更容易理解:
以上代码很简单,首先是定义了一个简单的函数,就是把a赋值为99,然后创建一个变量a=100,将变量给到函数,然后重新再访问该变量,发现,变量a=100没有变化,这个地方其实也是会涉及到全局变量和局部变量的问题,可以参考上一个章节作用域的内容进行理解
2)可变参数传递
对比上面的理解,此处就比较容易理解,就是传递参数给函数,函数操作后,传递的参数有了变化,或者说参数是可变得,通过以下代码进行说明:
以上代码中,同时融入了不可变参数的传递(X=1),L是可变参数,通过函数change(),会发现,再调用L,L中的内容发生了变化
上面的两个示例可以看出,不可变和可变,其实是和传递参数自身以及函数的处理方式有关
2、参数的匹配模式
1)位置次序:从左至右进行匹配
这个比较容易理解,就是参数按照位置传递给函数对应的参数,具体代码示例如下:
以上是一个简单的例子,定义一个函数,然后打印a,b,c,在调用函数的时候,需要传递三个数据,因为函数有三个变量a,b,c,在传递数据的时候,如何知道,数据1要给到谁呢?数据2要给到谁呢?数据3要给到谁呢?系统采用位置的顺序,来依次赋值,第一个位置的数据赋值给a,第二个位置数据赋值给b,第三个位置数据赋值给c,所以最后打印的是1,2,3,为了进行对比说明,如果把1,2,3的位置换成2,1,3,则结果会是2,1,3,代码运行结果如下:
2)关键字参数:通过参数名进行匹配
就是通过参数的名称来匹配调用的内容,而不是位置,还是用上面的例子,如果改为关键字函数同样运行类似代码,结果会有所不同,具体代码示例如下:
因为在调用函数时,已经明确用参数的名称和对应的内容,所以通过关键字就能把内容赋值给参数变量,而不是按照位置
3)默认值参数:为没有传入值得可选参数指定参数值
默认值一般是在函数定义的时候就设定好的,就算你再调用函数时,不提供参数的值,函数依然会运行,为了说明有默认值和没有默认值的情况,还是沿用上面的代码,进行比对,具体代码示例如下:
以下是没有默认值参数的函数,在调用中,如果不传递三个参数的数据,函数就会报错
以下是有默认值参数的函数,在只有一个参数的数据情况下,依然是可以调用函数的
其实,默认值参数是对位置参数的一个补充和晚上,有默认值得参数,完全不影响位置参数的传递,以上面的默认值参数为例,如果你按照位置传递给参数数据,还是会执行位置次序的传递,具体代码示例如下:
4)可变长参数收集:收集任意多的基于位置或关键字的参数
有时候在调用函数,使用参数的时候,我们并不确认有多少参数,所以为了防止这种情况,使多个参数传递依然可以调用函数,就可以使用可变长参数收集,就是在按照位置对应给到相应参数后,把多余的数据,赋值给可变长参数,可变长参数有两种格式,一个是前面加【*】,一个是前面加【**】,具体代码示例说明:
由上面的代码可以看出,*d就是把其他位置的数据收集起来,作为一个元组一起操作,如果没有多余的数据,就打印空的元组
【*】是收集数据形成元组
【**】是收集数据形成字典,既然是字典肯定有key,所以需要用关键字的形式来调用函数,承接上面的函数,稍加修改,代码示例如下:
通过上面两个代码示例的对比可以发现,虽然都是要收集多余的数据成为一个参数变量,但是【*】与【**】的使用还是有很大差别的,【**】的使用,多出来的数据,必须是用关键字的形式,否则系统会报错
5)可变长参数解包:传入任意多的基于位置或关键字的参数
上面的例子说明的是将多余的数据收集到一个变量中,那反过来想,能否将一个数据,分给多个变量?可以的,此处使用【*】就是解包的作用,还是沿用上面的代码,具体示例如下:
首先是定义一个列表,里面有三个数据,然后整个列表直接传递给函数,也就是调用函数,通过【*】解包,依次赋值,会发现,和直接复制位置函数是一样的,但是从代码的格式看,更精简了
6)Keyword-only参数:必须按照名称传递的参数
前面提到的关键字参数,是可以和位置参数结合使用,甚至可以彼此替代,例如位置参数,可以通过关键字参数赋值调用函数
此处说的keyword-only参数与关键字参数有所区别和差异
keyword-only参数必须只按照关键字传入并且永远不会被基于位置参数来填充的参数;
位置:必须指定在一个单个星号后面,而不是两个星号
通过具体代码示例理解会更容易,代码示例如下:
如果位置不对,系统会提示错误,如下:
正确的位置如下:
然后通过调用该函数,会发现其中多个参数的对应关系
其中c=6,就是此处说的keyword-only参数,它是无法通过位置参数填充的
也就是说,如果你想改变c的参数,只能通过参数名来赋值,具体代码如下:
以上关于参数匹配的模式的运用,在实际的处理中会结合使用,使用会很灵活,所以不用拘泥于每一种形式,要根据具体问题来选择
好了,以上,就是本章的重点内容说明,下章再见!
《Python学习手册 第五版》 每章时间规划及完成进度:
2019.11.25-2019.12.01 第01章,已完成:《Python学习手册 第五版》 -第1章 问答环节
2019.12.02-2019.12.08 第02章,已完成:《Python学习手册 第五版》 -第2章 Python如何运行程序
2019.12.09-2019.12.15 第03章,已完成:《Python学习手册 第五版》 -第3章 你应如何运行Python程序
2019.12.16-2019.12.22 第04章,已完成:《Python学习手册 第五版》 -第4章 介绍Python对象类型
2019.12.23-2019.12.29 第05章,已完成:《Python学习手册 第五版》 -第5章 数值类型
2019.12.30-2020.01.05 第06章,已完成:《Python学习手册 第五版》 -第6章 动态类型
2020.01.06-2020.01.12 第07章,已完成:《Python学习手册 第五版》 -第7章 字符串基础
2020.01.12-2020.01.19 第08章,已完成:《Python学习手册 第五版》 -第8章 列表与字典
2020.01.20-2020.01.26 第09章,已完成:《Python学习手册 第五版》 -第9章 元组、文件与其他核心类型
2020.01.27-2020.02.02 第10章,已完成:《Python学习手册 第五版》 -第10章 Python语句简介
2020.02.03-2020.02.09 第11章,已完成:《Python学习手册 第五版》 -第11章 赋值、表达式和打印
2020.02.10-2020.02.16 第12章,已完成:《Python学习手册 第五版》 -第12章 if测试和语法规则
2020.02.17-2020.02.23 第13章,已完成:《Python学习手册 第五版》 -第13章 while循环和for循环
2020.02.24-2020.03.01 第14章,已完成:《Python学习手册 第五版》 -第14章 迭代和推导
2020.03.02-2020.03.08 第15章,已完成:《Python学习手册 第五版》 -第15章 文档
2020.03.09-2020.03.15 第16章,已完成:《Python学习手册 第五版》 -第16章 函数基础
2020.03.16-2020.03.22 第17章,已完成:《Python学习手册 第五版》 -第17章 作用域
2020.03.23-2020.03.29 第18章,已完成
2020.03.30-2020.04.05 第19章,未完成
以下链接,可以供你了解这个学习笔记的所有章节最新进度
自学笔记系列:《Python学习手册 第五版》 -写在开始之前
《Python学习手册 第五版》 -第18章 参数的更多相关文章
- 《Python学习手册 第五版》 -第15章 文档
本章主要介绍Python中的文档,会通过多种方式来说明,如果查看Python自带文档和其他参考的资料 本章重点内容 1.#注释:源文件文档 2.dir函数:以列表显示对象中可用的属性 3.文档字符串 ...
- 《Python学习手册 第五版》 -第16章 函数基础
前面的章节讲解的是一些基础数据类型.基本语句使用和一些文档查看的内容,这些都是一些基础,其实还谈不上入门,只有了解了函数,才算入门 函数是编程里面使用最多的也是最基本的程序结构, 本章重点内容 1.函 ...
- 《Python学习手册 第五版》 -第17章 作用域
上一章的是函数的基础,因为函数在运用过程中,是可以嵌套的,函数中是会涉及到变量的,为了明确各自变量的使用范围,系统是有一套规则或者原则的,这就是作用域的概念 本章重点内容 1.作用域:作用域的概念 2 ...
- 《Python学习手册 第五版》 -第13章 while循环和for循环
上一章已经讲过if条件语句,这章重点是循环语句:while.for 本章的重点内容 1.while循环 1)一般形式 2)break.continue.pass和循环的else 2.for循环 1)一 ...
- 《Python学习手册 第五版》 -第12章 if测试和语法规则
本章节的内容,主要讲解if语句,if语句是三大复合语句之一(其他两个是while和for),能处理编程中大多数逻辑运算 本章的重点内容如下: 1.if语句的基本形式(多路分支) 2.布尔表达式 3.i ...
- 《Python学习手册 第五版》 -第11章 赋值、表达式和打印
上一章对Python的语句和语法已经进行了基本的说明,接下来就是每个章节的详细说明,本章的主要内容就是标题中涵盖的三点:赋值语句.表达式语句.打印语句 本章重点内容如下: 1.赋值语句 1)赋值语句的 ...
- 《Python学习手册 第五版》 -第10章 Python语句简介
前面在开始讲解数据类型的时候,有说过Python的知识结构,在此重温一下 Python知识结构: 程序由模块组成 模块包含语句 语句包含表达式 表达式创建并处理对象 关于知识结构,前面已经说过我自己的 ...
- 自学笔记系列:《Python学习手册 第五版》 -写在开始之前
今年双十一,在当当网上买了这本书,很厚很厚的一本书,大概有将近1700页左右,的确是一个“大工程”, 关于这本书的学习,我想采用一种博客的方式进行,既是写给自己,也想分享给每一个对Python学习感兴 ...
- 《Python学习手册 第五版》 -第14章 迭代和推导
承接上一章for循环的讲解,迭代和推导,是对for循环的一种深入的探索和扩展 本章重点内容 1.迭代 1)什么是迭代?都有哪些分类 2)常规的使用方法 3)多遍迭代器VS单遍迭代器 2.列表推导 1) ...
随机推荐
- byte的取值范围是-128~127,那么包含-128和127吗?
本帖最后由 王德升老师 于 2019-12-27 17:56 编辑 byte的取值范围为什么是-128~127?如果面试官问你取值范围包含127吗?1. 首先我们知道Java中byte类型是1个字节占 ...
- vm文件的优点
vm文件的优点 相较于内容写在jsp 文件: 1.在网页上上浏览和下载的内容用的是同一套,也就是说只需要维护一套内容,页面上看到的和下载得到的是一致的. 2.版本控制较为简便, 实现了页面内容和jsp ...
- 吴裕雄--天生自然 R语言开发学习:基本数据管理(续二)
#---------------------------------------------------------# # R in Action (2nd ed): Chapter 4 # # Ba ...
- (二)Java数组的使用
Java数组 无序数组插入删除查询操作: public class ArrayList { private static int[] intArray; private int nElems; pub ...
- 高效JS简化版
详:.doc (颜色标注)2章17条 2018.6.24 星期日 1:24 第 1 章 让自己习惯 JavaScript 第 1 条:了解你使用的 JavaScript 版本 ES5 引入了另一种版本 ...
- 关于android应用程序的入口
android应用程序,由一到多个Activity组成.每个Activity没有很紧密的联系,因为我们可以在自己的程序中调用其它Activity,特别是调用自己的代码之外生成的Activity,比如a ...
- epoll的原理和用法
设想一个场景,有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收到TCP包)也就是说,在每一时刻进程只需要处理这100万连接中的一小部分连接,那么,如何 ...
- 【桌面篇】Archlinux安装kde桌面
ArchLinux安装配置手册[桌面篇] 现在你的U盘可以拔掉了,重启后会发现和刚刚没什么区别,还是命令行的界面,别着急现在就带你安装桌面环境. 连接网络 首先检查一下网络是否连接成功 ping ww ...
- 【快速上手】Git的使用教程
创建Git仓库 git init 查看当前仓库情况 git status 添加修改 git add (file) or git add . 查看未提交的修改 git diff 撤销提交操作 git r ...
- Python 十大语法
前言 Python 是一种代表简单思想的语言,其语法相对简单,很容易上手.不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了.本文精心筛选了最能展现 Python 语法之精妙的十个知识 ...