在函数的定义和调用中,参数是使用最多喝最频繁的,本章内容就是围绕函数的参数进行讲解

本章重点内容如下:

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章 参数的更多相关文章

  1. 《Python学习手册 第五版》 -第15章 文档

    本章主要介绍Python中的文档,会通过多种方式来说明,如果查看Python自带文档和其他参考的资料 本章重点内容 1.#注释:源文件文档 2.dir函数:以列表显示对象中可用的属性 3.文档字符串 ...

  2. 《Python学习手册 第五版》 -第16章 函数基础

    前面的章节讲解的是一些基础数据类型.基本语句使用和一些文档查看的内容,这些都是一些基础,其实还谈不上入门,只有了解了函数,才算入门 函数是编程里面使用最多的也是最基本的程序结构, 本章重点内容 1.函 ...

  3. 《Python学习手册 第五版》 -第17章 作用域

    上一章的是函数的基础,因为函数在运用过程中,是可以嵌套的,函数中是会涉及到变量的,为了明确各自变量的使用范围,系统是有一套规则或者原则的,这就是作用域的概念 本章重点内容 1.作用域:作用域的概念 2 ...

  4. 《Python学习手册 第五版》 -第13章 while循环和for循环

    上一章已经讲过if条件语句,这章重点是循环语句:while.for 本章的重点内容 1.while循环 1)一般形式 2)break.continue.pass和循环的else 2.for循环 1)一 ...

  5. 《Python学习手册 第五版》 -第12章 if测试和语法规则

    本章节的内容,主要讲解if语句,if语句是三大复合语句之一(其他两个是while和for),能处理编程中大多数逻辑运算 本章的重点内容如下: 1.if语句的基本形式(多路分支) 2.布尔表达式 3.i ...

  6. 《Python学习手册 第五版》 -第11章 赋值、表达式和打印

    上一章对Python的语句和语法已经进行了基本的说明,接下来就是每个章节的详细说明,本章的主要内容就是标题中涵盖的三点:赋值语句.表达式语句.打印语句 本章重点内容如下: 1.赋值语句 1)赋值语句的 ...

  7. 《Python学习手册 第五版》 -第10章 Python语句简介

    前面在开始讲解数据类型的时候,有说过Python的知识结构,在此重温一下 Python知识结构: 程序由模块组成 模块包含语句 语句包含表达式 表达式创建并处理对象 关于知识结构,前面已经说过我自己的 ...

  8. 自学笔记系列:《Python学习手册 第五版》 -写在开始之前

    今年双十一,在当当网上买了这本书,很厚很厚的一本书,大概有将近1700页左右,的确是一个“大工程”, 关于这本书的学习,我想采用一种博客的方式进行,既是写给自己,也想分享给每一个对Python学习感兴 ...

  9. 《Python学习手册 第五版》 -第14章 迭代和推导

    承接上一章for循环的讲解,迭代和推导,是对for循环的一种深入的探索和扩展 本章重点内容 1.迭代 1)什么是迭代?都有哪些分类 2)常规的使用方法 3)多遍迭代器VS单遍迭代器 2.列表推导 1) ...

随机推荐

  1. Spring Data JPA教程, 第八部分:Adding Functionality to a Repository (未翻译)

    The previous part of my tutorial described how you can paginate query results with Spring Data JPA. ...

  2. PL/SQL学习(三)游标

    原文参考:http://plsql-tutorial.com/ 两种类型:     隐式:         执行INSERT.UPDATE.DELETE 或者只返回一条结果的SELECT语句时默认创建 ...

  3. URL模块之parse方法

    url.parse(urlString , boolean , boolean) parse这个方法可以将一个url的字符串解析并返回一个url的对象. 参数: urlString指传入一个url地址 ...

  4. XAF创建一个DashBoard

    1.首先启动windows程序之后点击DashBoard导航栏 2.接着点击新建按钮,开始创建一个DashBoard 3.接着根据你的数据来源选择数据源,这里我选择了数据库 4.接着填好你的服务器和数 ...

  5. 手把手教学在Springboot中搭建使用Guava cache,包教包会,不会我输一包辣条给你

     guava cache使用简介 概述 缓存是日常开发中经常应用到的一种技术手段,合理的利用缓存可以极大的改善应用程序的性能. Guava官方对Cache的描述连接 缓存在各种各样的用例中非常有用.例 ...

  6. bedtools神器 | gtf转bed | bed文件运算

    我们生信技能书有一篇介绍bedtools的文章,可以在微信里搜着看下,非常有用. http://bedtools.readthedocs.io/en/latest/ gtf转bed用Linux命令完全 ...

  7. 【Html】Vue动态插入组件

    html: <div id="app"> <p>{{ message }}</p> <button @click="add('a ...

  8. 已有Web项目添加Maven支持

    IDE:MyEclipse 当我们在现有的Web开发项目中集成 Maven 的时候,需要修改以下几个地方: 1.将以下代码拷贝到工程根路径下的 .project 文件中的 <buildSpec& ...

  9. Photon3Unity3D.dll 解析三&mdash;&mdash;OperationRequest、OperationResponse

    OperationRequest 代表Operation操作的Request,包含Code和Parameters OperationCode  Byte类型的值,代表操作,由LiteOpCode定义了 ...

  10. iOS 自定义滑动切换TabbarItem 觉得设计丑也要做出来的UI效果。。。

    UI丑却要继续做的感言: 对UI不满意的时候,就会觉得丑爆了,时间长了,却丑习惯了. 论前一阵子Tabbar 多丑,丑得最后不要tabbar了...但是自定义tabbar 和遇到的问题解决的过程可以记 ...