第六天python3 函数、参数及参数解构(一)
函数
作用:结构话编程对代码的最基本的封装,一般按照功能组织一段代码,封装的目的是为了复用,减少冗余代码,代码更加简洁、美观,可读易懂;
分类:
内建函数,如max() reversed()等
库函数,如math.ceil()等
函数定义、调用
def语句定义函数
def 函数名(参数列表):
函数体(代码块)
[return 返回值]
函数名就是标识符,语句块必须缩进,约定4个空格;python的函数没有return语句,隐式返回一个None值;定义中的参数列表成为形式参数,只是一种符号表达,简称形参;
函数定义,只是声明了一个函数,它不会被执行,需要调用;调用的方式,就是函数名加上小括号,括号内写上参数,调用时写的参数是实际参数,是实实在在传入的值,简称实参;
举例:

上图所示只是一个函数的定义,又一个函数叫做add,接收2个参数,计算结果通过返回值返回,调用通过函数名add加两个餐素,返回值可使用变量接收;定义需要在调用前,也就是说调用时,已经被定义过了,否则抛NameError异常;函数是可调用的对象,callable();

函数的参数
参数调用时传入的参数要和定义的个数相匹配(可变参数例外);
位置参数
def f(x,y,z) 调用使用f(1,3,5) 按照参数定义顺序传入实参
关键字参数
def f(x,y,z) 调用使用f(x=1,y=3,z=5) 使用形参的名字来出入实参的方式,如果使用来形参名字,那么传参顺序就可和定义顺序不同;
传参
f(z=None,y=10,x=[1]) 关键字或者命名参数传参
f((1,),z=6,y=4.1) 位置和关键字参数使用传参;
f(y=5,z=6,2) #这个有问题,要求位置参数必须在关键字参数之前传入,位置参数是按位置对应的;
函数参数默认值
参数默认值:定义时,在形参后跟上一个值
def add(x=4,y=5):
return x+y
测试调用add(6,10)、add(6,y=7)、add(x=5)、add()、add(y=7)、add(x=5,y=6)、add(y=5,x=6)
作用:
参数的默认值可以在未传入足够的实参的时候,对没有给定的参数赋值为默认值;
参数非常多的时候,并不需要用户每次都输入所有的参数、简化函数调用;
示例:

可变参数
一个形参可以匹配任意个参数
示例:有多个数,需要累加求和;

传入可迭代对象,迭代元素求和;
位置参数的可变参数

在形参前使用*表示该形参是可变参数,可以接收多个实参;
收集多个实参为一个tuple;
关键字参数的可变参数
示例:配置打印信息

如上图所示:形参前使用**符号,表示可以接收多个关键字参数;收集的实参名称和值组成一个字典;
可变参数混合使用
def showconfig(username,password,**kwargs)
def showconfig(username,*args,**kwargs)
def showconfig(username,password,**kwargs,*args)
总结:
有位置可变参数和关键字可变参数
位置可变参数在形参前使用一个*号;
关键字可变参数在形参前使用两个**号;
位置可变参数和关键字可变参数都可一收集若干个实参,位置可变参数收集成一个tuple,关键字可变参数收集成一个dict;
混合使用参数的时候,可变参数更要放到参数列表之后,普通参数需要放到参数列表前面,位置可变参数需要在关键字可变参数之前;
举例:

keyword-only参数
keyword-only参数是python3之后加入的,如果在一个*号参数后,或者一个位置可变参数后,出现的普通参数,实际上已经不是普通的参数了,而是keyword-only参数;
示例:

如上图所示:args可以看作已经截获了所有的位置参数,x不使用关键字参数就不可能拿到实参;
keyword-only参数的另一种形式

如上图所示:*号之后,普通形参都变成了必须给出的deyword-only参数;属于特殊写法,*号没有任何意义;
可变参数和参数默认值
举例:

x是keyword-only参数
示例2:

第六天python3 函数、参数及参数解构(一)的更多相关文章
- 函数、可变参数、keyword-only参数、实参解构
函数的数学定义:y=f(x) ,y是x的函数,x是自变量.y=f(x0, x1, ..., xn) python中的函数: 由函数名称.参数列表.和若干语句组成的语句块构成,完成一定的功能,是组织代码 ...
- vuex2.0.0爬坑记录 -- mutations的第一个参数state不能解构
今天在学习vuex的过程中,遇到了一个很困扰人的问题,最终利用vuex的状态快照工具logger解决了问题. 问题是这样的,我在子组件中使用了mapState()函数来将状态映射至子组件中,使子组件能 ...
- 【ES6 】ES6 解构赋值--函数参数解构赋值
函数的参数也可以使用解构赋值. function add([x, y]){ return x + y; } add([1, 2]); 上面代码中,函数add的参数表面上是一个数组,但在传入参数的那一刻 ...
- [ES6系列-03]ES6中关于参数相关特性详解(参数默认值与参数解构赋值与剩余参数)
[原创] 码路工人 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 今天总结一下 ES6 中跟参数相关的内容. 欢迎补充斧正.留言交流. 让我们互相学习一起进步. 1. ES6 参数默认值( ...
- es6 函数解构的用途
es6的变量解构赋值很方便,那具体有哪些用途呢? 1.变换变量的值 let n = 10; let m = 20; [n, m] = [m, n] 这样n , m 的值 会互换, 即:n = 20, ...
- es6的解构函数
话说,解构无处不在啊,鄙人自从用了vue写项目以来,总是遇到各路大神莫名其妙的写法,然并未出任何错,查之,然解构也,呜呼哀哉,进而习之. 解构(Destructuring):是将一个数据结构分解为更小 ...
- ES6 - Note2:解构赋值
ES6的解构赋值就是利用模式匹配从按照一定模式的数组或者对象中提取值赋值给变量. 1.数组的解构赋值 在ES6以前,变量的赋值是直接指定的,以后可以这么来写,如下所示 let [a,b,c] = [1 ...
- 变量的解构赋值////////////z
变量的解构赋值 数组的解构赋值 对象的解构赋值 字符串的解构赋值 数值和布尔值的解构赋值 函数参数的解构赋值 圆括号问题 用途 数组的解构赋值 基本用法 ES6允许按照一定模式,从数组和对象中提取值, ...
- ES6 变量的解构赋值
数组的解构赋值 var [a,b,c] = [1,2,3]; 左边是变量,右边是值,根据数据结构一一对应 只要等号两边的模式相同,左边的变量就会被赋予右边对应的值,必须模式相同 如果等号 ...
随机推荐
- ElasticSearch7.3学习(二十四)----相关度评分机制详解
1.算法介绍 relevance score(相关性分数) 算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度.Elasticsearch使用的是 term freque ...
- 【FAQ】申请华为运动健康服务授权的4个常见问题及解决方法
华为运动健康服务(HUAWEI Health Kit)提供原子化数据开放,在获取用户对数据的授权后,应用可通过接口访问运动健康数据,对用户数据进行增.删.改.查等操作,为用户提供运动健康类数据服务.这 ...
- mybatis plus 的 ActiveRecord 模式
实体类继承 Model public class Test extends Model<Test> implements Serializable {} 就可以 new Test().in ...
- 构建AR视频空间大数据平台(物联网及工业互联网、视频、AI场景识别)
目 录 1. 应用背景... 2 2. 系统框架... 2 3. AI场景识别算法和硬件... 3 4. AR视频空间管理系统... 5 5. ...
- linux篇-linux mysql5.6.27源码安装和错误解决
centos mysql5.6.27 1编译安装 先进入到文件放置的路径下 创建一个个文件 #mkdir–p /data/mysql/mysql #mkdir–p /data/mysql/mysqld ...
- 这篇 DNS ,写的挺水的。
试想一个问题,我们人类可以有多少种识别自己的方式?可以通过身份证来识别,可以通过社保卡号来识别,也可以通过驾驶证来识别,尽管有多种识别方式,但在特定的环境下,某种识别方法会比其他方法更为适合.因特网上 ...
- CSS的几种选择器
选择器 目录 选择器 基础选择器 标签选择器 类选择器 id选择器 通配符选择器 复合选择器 后代选择器 子选择器 并集选择器 伪类选择器 基础选择器 标签选择器 标签选择器可以把一类标签全部选择出来 ...
- vue大型电商项目尚品汇(后台篇)day01
开始我们后台篇的内容,前面处理了一些事情,去学校完成授位仪式,由校长授位合影,青春不留遗憾,然后还换了一个电脑,征战了四年的神船终于退役了,各种各样的小毛病是真的烦人. 现在正式开始后台篇的内容,做了 ...
- SpringBoot的浅浅配置和小整合
SpringBoot的浅浅配置和小整合 本文如题,就是浅浅记录一下学习的过程中一些过程,比较简单,并没有多少深度.谢谢! SpringBoot创建 从IDEA中新建项目或者模块.注意jdk版本,一般不 ...
- 使用Node.js还可以发邮件
前言 今天,我们给大家开发一个小效果.篇幅比较短,主要给大家展示效果.实战 首先我们初始化一个Node项目 npm init -y 创建一个app.js文件 'use strict'; const n ...