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

本章重点内容如下:

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. drf中的jwt使用与手动签发效验

    jwt认证 1)session存储token,需要数据库参与,耗服务器资源.低效 2)缓存存token,需要缓存参与,高效,不易集群 3)客户端存token,服务器存签发与交易token的算法,高效, ...

  2. RxJS学习笔记之Subject

    本文为原创文章,转载请标明出处 目录 Subject BehaviorSubject ReplaySubject AsyncSubject 1. Subject 总的来说,Subject 既是能够将值 ...

  3. mac上svn: This client is too old to work with working copy 问题的解决

    安装svn时,提示This client is too old to work with working copy........原因:svn的版本过旧,安装1.8的svn即可.下面简要说明一些步骤: ...

  4. 吴裕雄--python学习笔记:通过sqlite3 进行文字界面学生管理

    import sqlite3 conn = sqlite3.connect('E:\\student.db') print("Opened database successfully&quo ...

  5. nodejs日常总结

    1.node -v 查看当前node版本 2.npm root -g 查看npm安装路径(还有通过npm安装的vue-cli的路径) 默认: /usr/local/lib/node_modules r ...

  6. fastDFS 一二事 - 简易服务器搭建之--阿里云

    第一步:安装fastDFS依赖libevent工具包 yum -y install libevent 第二步:解压libfastcommon-1.0.7.tar.gz文件 tar -zvxf libf ...

  7. Tp5安全篇入门

    输入安全 设置public目录为唯一对外访问目录,不能把资源文件放入到应用目录: 使用框架提供的请求变量获取方法(Request类的param方法及input助手函数)而不是原生系统变量获取用户输入的 ...

  8. 查漏补缺:进程间通信(IPC):管道

    管道是UNIX系统IPC的最古老形式,所有UNIX系统都提供此种通信机制.管道有以下两种局限性: (1)历史上,管道是半双工的(即数据只能在一个方向上流动). (2)管道只能在具有公共先祖的两个进程之 ...

  9. 性能测试之Mysql数据库调优

    一.前言 性能调优前提:无监控不调优,对于mysql性能的监控前几天有文章提到过,有兴趣的朋友可以去看一下 二.Mysql性能指标及问题分析和定位 1.我们在监控图表中关注的性能指标大概有这么几个:C ...

  10. 扫描神器nmap使用教程

    总结 nmap -v 详细信息输出nmap -p 指定端口nmap -iL 扫描文件中的ipnmap -exclude 不扫描某些ipnmap -Pn 使用ping扫描,显式地关闭端口扫描,用于主机发 ...