一、python函数
由若干语句组成的语句块,函数名称,参数列表构成,它是组织代码的最小单元,通过函数完成一定的功能
1、函数的作用
结构化编程对代码的最基本封装,一般按照功能组织一段代码
封装的目的是为了功能复用,减少冗余代码
使代码更加简洁美观,可读易懂
2、函数的分类
内建函数,如:max(),reversed()等
库函数,如math.ceil()等
3、函数的定义和调用
定义
def语句定义函数
函数名就是标识符,命名要求一样
语句块必须缩进,约定4个空格
python的函数若没有return语句,隐式会返回一个None值
定义中的参数列表成为形式参数,只是一种符号表达,简称形参
调用
函数定义只是声明了一个函数,它不会被执行,需要调用
调用方式,就是函数名加上小括号,括号内写参数
调用时写的参数是实际参数,是实实在在的传入的值,简称实参
二、函数参数
参数调用时传入的参数要和定义的个数相匹配(可变参数例外)
位置参数:按照参数定义顺序传入实参fn(1,2)
关键字参数:使用形参的名字来传入实参的方式,如果使用了形参名字,那么传参顺序就可以随意fn(x=1,y=1)
传参:要求位置参数必须在关键字参数之前传入,位置参数是位置对应的;
1、函数参数默认值
参数的默认值可以在未传入足够的实参的时候,对没有给定的参数赋值为默认值
参数非常多的时候,并不需要用户每次都输入所有的参数,简化函数调用
2、可变参数
在形参前使用*表示该形参是可变参数,可以接收多个实参
收集多个实参为一个tuple元组
3、可变关键字参数
形参前使用**符号,表示可以接收多个关键字参数
收集的实参名称和值组成一个字典
4、参数总结
有位置可变参数和关键字可变参数
位置可变参数在形参前使用一个冒号*
关键字可变参数在形参前使用两个冒号**
位置可变参数和关键字可变参数都可以收集若干个实参
混合使用参数的时候,可变参数要放到参数列表的最后,普通参数放在前面
5、keyword-only参数
如果在一个冒号参数后,或者一个位置可变参数后,出现的普通参数,实际上已经不是普通的参数了,
而是keword-only参数
6、参数规则
参数列表一般顺序是,普通参数,缺省参数,可变位置参数,kew
三、参数解构
给函数提供实参的时候,可以在集合类型前使用或者**,把集合类型的结构解开,提取所有元素作为函数的实参
非字典类型使用解构成位置参数
字典类型使用**解构成关键字参数
提取出来的元素数目要和参数的要求匹配,也要和参数的类型匹配
四、函数的返回值和作用域
1、返回值
python函数使用return语句返回值,所有函数都有返回值,如果没有return,会隐式调用return None
return语句并不一定是函数的语句最后一条语句
一个函数可以存在多个return语句,但是只有一条可以被执行,如果没有一条return语句被执行到,就执行隐式retnurn
如果有必要,可以显示调用return None,可以简写为return
如果函数执行了return语句,函数就会返回,当前被执行的return语句之后的其他语句不会被执行
return的作用是结束函数调用,返回值不能同时返回多个值
2、作用域
全局作用域:在整个程序运行环境中都可见
局部作用域:在函数,类等内部可见,局部变量使用范围不能超过其所在的局部作用域