Python函数:
由诺干个语句组成的语句块、函数名称、参数列表构成,它是组织代码的最小单元,完成一定的功能
函数的作用:
结构化编程对代码的最基本的封装,一般按照功能组织一段代码
封装的目的是为了复用,减少冗余代码
代码更叫的简洁,易读性强
函数的分类:
内键函数,如:print()、max()、int()等
库函数,如:math.ceil()等
自定义函数,使用def关键字定义
函数名就是标识符,字母数字下划线,不能以数字开头
语句块必须缩进,约定为4个空格
Python的函数若没有return语句,会隐式返回None值
定义中的参数列表为形式参数,简称形参
函数定义只是声明了一个函数,它不会被执行,需要调用才能执行
调用的方式,就是函数名叫小括号,如有必要则传参数到小括号内
调用时写的参数是实际参数,简称为实参
上面是定义一个函数add,函数名是add,能接收两个参数
该函数计算的结果通过返回值返回,需要return语句
调用格式,通过函数名的add()加两个参数,返回值可使用变量接收
函数名也是标识符,返回值也是值
定义需要在调用前,也就是说调用时已经被定义过,否则抛异常NameError
函数式可调用的对象,使用内嵌函数callable(函数名)返回True or False
函数在定义时要约定好形式参数,调用时也是要提供足够的实际参数,一般来说,形式参数和实际参数保持一致(可变参数除外)
传参方式:
1、位置传参
定义时def fn(x,y),调用时fn(1,2)按照参数定义的顺序传入参数
2、关键字传参
定义时def fn(x,y),调用时fn(x=1,y=2),使用形参的名字来传入实参的方式,如果使用了形参名字,那么传参顺序可以调换都行
要求位置参数必须在关键字参数之前传入,位置参数是按位置对应的
示例:
缺省值也称之为默认值,可以在函数定义时,为形参增加一个缺省值,其作用:
1、参数的默认和可以在未传入足够的实参的时候,对没有给定的参数赋值为默认值
2、参数非常多的时候,并不需要用户输入所有的参数,简化函数的调用
可变参数
可变位置形式参数
1、可变位置参数
在形参前使用*表示该形参是可变位置参数,可以接收多个实参
它将收集来的实参组织到一个tuple元组中
2、可变关键字参数
在形参前使用**表示该形参是可变关键字参数,可以接收多个关键字参数
它将收集来的实参组织到一个dict字典中
总结
有可变位置参数和可变关键字参数
可变位置参数在形参前使用一个*号表示
可变关键字参数在形参前使用两个**号表示
可变位置参数和可变关键字参数都是可以收集诺干个实参,可变位置参数收集形成一个tuple()元组 ,可变关键字参数收集形成一个dict字典
混合使用参数的时候,普通参数需要放到参数列表前面,可变参数要放到参数列表的后面,可变位置参数需要在可变关键字参数之前
keyword-only参数
在Python3开始引入了keyword-only参数,在形参定义时,在一个*号之后,或在一个可变位置位置参数之后出现的普通参数,就称之为keyword-only参数
keyword-only参数则表示这个参数只能用关键字传参,keyword-only还有另外一种表示方式,一个*号,后面接普通参数。
position-only参数
在Python3.8引入了position-only位置参数,寓意只能通过位置传参。
参数规则
参数列表参数 一般顺序是:普通参数,缺省参数,可变位置参数,keyword_only (可带缺省值),可变关键字参数。
在给函数提供实际参数的时候,可以在可迭代对象前使用*或**来进行结构的解构,提取出其中所有的元素作为函数的实参
使用*解构成位置传参
使用**解构成关键字传参
提取出来的元素数目要和参数的要求匹配
示例: