1. 什么是函数
函数是对实现某一特定功能的代码块的封装
2. 函数的分类
系统函数(内置函数)-- 系统已经实现函数(已经造好的机器),程序员只需要调用就行
print(), input(), len(), sum(), max()自定义函数 -- 程序员自己声明的函数(自己造机器)
3. 函数的声明(定义)
3.1 语法:
def 函数名(形参列表):
函数说明文档
函数体
3.2 说明
def -- python声明函数的关键字
函数名 -- 标识符,不能是关键字,和变量名要求一样
见名知义,所有字母小写,多个字符用下划线隔开
() -- 固定写法
形参列表 -- 变量1, 变量2, 变量3, ....(根据情况变量名的个数可以是0个,1个和多个)
形参作用:是将函数外面的数据传递到函数的里面
: -- 固定写法
函数体 -- 与def 保持一个缩进的一条或多条语句(实现功能的代码块)
函数说明文档 -- 对函数功能、参数和返回值的说明
3.3 初学者声明函数的步骤
1) 确定函数的功能
2) 根据功能确定函数名
3) 确定形参(看实现函数的功能需不需要从外面传值,如果需要传值需要几个)
4) 实现函数的功能
5) 确定返回值
!!!!注意:函数声明的时候,函数体不会执行
4. 函数的调用
4.1 语法
函数名(实参列表)
4.2 说明
函数名 -- 已经声明过的函数
() -- 固定写法
实参列表 -- 用实参给形参赋值 数据值1,数据2,数据3,....
4.3 函数的调用过程
1)先回到函数声明的位置
2)用实参给形参赋值(传参,要保证每个形参都有值)
3)执行函数体
4)获取返回值
5)回到函数调用的位置
函数的参数一共有四种:位置参数、关键字参数、默认值参数、不定长参数
1.位置参数和关键值参数
调用函数的时候根据实参的写法分为位置参数和关键字参数
位置参数:让实参的顺序和形参一一对应,中间用逗号隔开
关键字参数:通过以'形参名1 = 值1', '形参名2 = 值2'...来确定实参
注意:如果既有位置参数又有关键字参数,位置参数必须写在关键字参数前面
2.参数默认值
声明函数的时候可以给形参赋默认值。有默认值的形参,可以不用给形参赋值
注意:声明的时候有默认值的参数要放在没有默认值的参数后面,默认值还可以说明类型
3.参数的类型说明
python中类型只有说明的作用,没有约束的作用
1)参数赋默认值
2)参数名:类型
def func2(a: int, b= 10)
4.不定长参数 -- 形参的参数不确定
4.1. 声明函数的时候在形参前面加一个星号,那么这个参数就变成不定长参数,可以同时接收多个位置实参(将这个参数变成元组)
注意:不带号的参数要放在带*号的前面 没有默认值的要放在有默认值的前面
4.2. 声明函数的时候,在形参的前面加**,那么这个参数也会变成不定长参数, 可以同时接收多个关键字实参(将这个参数变成字典)
返回值
1. 什么是函数的返回值
返回值就是return关键字后面表达式的值,就是函数调用表达式的值
1.1 说明
return -- 函数体中的一个关键字,只能在函数中出现
1.2 作用
执行函数体的时候结束函数,确定函数的返回值
函数调用过程:执行函数体,获取返回值
1.回到函数声明的位置
2.传参
3.执行完函数体
4.执行完函数体,确定函数返回值
执行完函数体:函数体执行完,执行过程遇到return
确定函数返回值:看执行函数的过程中有没有遇到return,后面的表达式的值就是函数的返回值
如果没有遇到return函数的返回值就是None
5.回到函数调用的位置,接着往后执行(这个时候函数调用表达式的值)
2.什么时候需要返回值(初学者)
指导思想:如果实现函数的功能会产生新的数据,就可以把数据作为返回值。
return 返回值1,返回值2,....(可以返回多个值,实质是返回元组)
return可以把数据进行存储等操作,print只能在控制台看
匿名函数
1.什么是匿名函数
匿名函数就是没有名字的函数
- 语法:
lambda 参数列表: 返回值
2)说明
lambda - 关键字
参数列表 -- 相当于普通函数的形参列表,变量1,变量2,.....至少一个参数
: -- 固定写法,不会产生缩进
返回值 -- 相当于普通函数体中的return语句。 不能是赋值语句,可以是其他任何语句
注意:匿名函数本质也是函数 之前函数中的语法绝大多数也适用
(通过:类型名对参数进行说明不支持,其他的都支持)
匿名函数能做的事情,普通函数也能做,知识匿名函数简洁
变量的作用域
1. 变量的作用域
变量的作用域就是变量的使用范围:
2. 全局变量、局部变量
1)全局变量:没有声明在函数/类中的变量就是全局变量,全局变量的作用域从变量声明开始到整个py文件结束
2)局部变量:声明在函数/类中的变量就是局部变量,作用域是从变量声明到函数结束(形参也是局部变量)
当在调用函数/类, 系统会自动在内存的栈区间为这个函数开辟一个独立的内存区域,用来保存在函数内声明的变量或者产生的数据
当函数调用结束后,这块内存区域会自动销毁
3. global 和 nonlocal
global -- 在函数中声明一个全局变量(只能在函数里面使用)
nonlocal -- 想要在局部的局部取修改一个局部变量的值,使用nonlocal
x1 = 100 # 可以在外面没有