📔 Python函数 学习笔记
1. 函数概述¶
-
函数是为了解决代码重复和程序结构差的一种代码块。
-
函数相当于具备某个功能的工具。对于函数的使用必须遵循一个原则:
- 先定义后调用(先准备工具再使用)
1.1 为什么需要函数?¶
为了解决代码存在的一些问题:
- 组织结构不清晰,可读性较差
- 代码会冗余
- 可维护性差,可扩展性差。
- 程序的模块管理差
- 代码重复率高
所以在一定程度上,函数就是通过封装,让代码可重复利用提高,保持程序的模块性,也让代码块符合单一性的原则
1.2 函数定义语法介绍¶
语法解释:
def
:定义函数的关键字函数名
:函数名指向函数内存地址,是对函数体代码的引用。函数的命名可以反映出函数的功能括号
:括号内定义参数,参数可有可无,且无需指定参数的类型冒号
:括号后面要加冒号。然后在下一行开始缩进编写函数体的代码"""文档描述"""
:描述函数功能,参数介绍等信息的文档。非必要,但是建议加上,从而增强函数的可读性。【一般在开源软件中详细,其余情况可写可不写】- 函数体:由语句和表达式组成
return 值
:定义函数的返回值,return 是可有可无。
1.3 函数定义三种形式及其应用场景¶
1.4 函数调用三种形式及其应用场景¶
1.5 函数返回值三种形式及其应用场景¶
return
是函数结束
的标志- 即函数体代码一旦运行到return就会立即终止函数的执行。并且会将return后的值当作本次运行的结果返回
2. 参数相关概念和分类¶
2.1 形参和实参¶
- 形参:在定义函数阶段定义的参数称为形式参数。简称形参,相当于变量名。
- 实参:在调用函数阶段传入的值称为实际参数。简称实参数,相当于变量值。
形参与实参之间的关系:
- 在调用阶段,实参(变量值)会绑定给形参(变量名)
- 绑定关系只能在函数体内使用。
- 绑定关系在函数调用时生效,函数调用结束后接触绑定关系。
实参的形式:
2.2 位置参数¶
-
位置参数:按从左往右的顺序依次定义的参数称为
位置参数
。 -
位置形参
- 按照从左往右的顺序直接定义的“变量名”
- 特点:必须被传值,不可多不可少
-
位置实参
- 按照从左到右的顺序依次传入的值
- 特点:按照顺序与形参
一一对应
2.3 关键字参数¶
- 在函数调用阶段,按照
key = value
的形式传入的值 -
特点:给指定形参传值,可以完全不按照顺序进行传值。
-
如果是混合使用,位置实参必须放在关键字实参之前。
-
不能同时给同一个形参重复传值。
2.4 默认形参¶
-
在定义函数阶段,就已经被赋值的形参,称之为
默认参数
。 -
特点:在定义阶段就已经赋值,意味着在调用阶段可以不进行赋值操作。
-
如果位置形参和默认形参混合使用,
位置形参
必须在默认形参
的左边
-
默认参数的值是在函数定义阶段被赋值的。
2.5 可变长参数(*
和 **
的用法)¶
-
可变长度指的是在调用函数时,传入的
值(实参)
的个数不固定
。 -
实参是用来为形参赋值的,所以对应性针对溢出的实参必须有对应的形参来接收。
-
可变长度的位置参数
-
可变长度的关键字参数
-
如果
*
在实参
中,实参中带*
,会先将*
后的值拆分成位置实参
。 -
如果是
形参和实参
都包含*
,会直接将实参的值
拆分,然后再进行赋值操作。 -
**
可以用在实参中(**
后只能使用字典格式),在实参
中带**
,先将**
后的值得拆分成为位置实参
。 -
形参
和实参
中都包含**
-
如果是
*
和**
混合使用*args
必须在**kwargs
之前
-
命名关键字参数(了解)
- 在定义函数时, * 后定义的参数,称为命名关键字参数。
3. 生命周期¶
- 变量在程序中的生存周期(也就是所谓的存活周期)。
3.1 名称空间¶
名称空间:存放变量名字的地方。
-
内置名称空间
-
存放的名字:存放Python解释器内置的名字
-
存活周期:Python解释器启动则产生,Python解释器关闭则销毁
-
-
全局名称空间
-
存放的名字:运行顶级代码所产生的名字,不是函数内定义、也不是内置,剩下的全局名字
-
存活周期:Python文件执行则产生,python文件运行完毕后销毁。
-
-
局部名称空间
-
存放的名字:在调用函数时,运行函数代码过程中产生的函数内的名字/
-
存活周期:函数调用时生效,函数调用完毕后则销毁。
-
3.2 变量作用域¶
- 限制变量的访问权限。
变量的作用域决定了程序可以访问某个特定的变量名称。常见的两种变量作用域:
-
全局变量
- 内置名称看见、全局名称空间。
- 程序内有效,可以被所有的函数共享。
-
局部变量
- 临时有效
- 局部有效:函数内有效。
- global
- local
具体的实例分析:
nonlocal(了解)
:修改函数外层函数包含的名字对应的值(不可变类型)
4. 函数对象¶
5. 参考资料¶
- Python官方文档
- W3CSchool Python教程
- 路飞学城Python开发视频课:B站