1.函数的作用
- 对某块功能的代码的封装
- 提高代码的复用性(重用性)
- 大大的提高了开发效率
2.函数定义和调用
-
定义
def 函数名(): pass
-
调用
函数名()
-
注意:
- 函数是一次定义, 多次调用
- 如果函数名相同, 后面的会覆盖前面的同名函数
3.函数参数(一)
-
作用:进一步的提高了一个没有参数函数的复用性
-
定义格式:
- 形参: 形式参数(有多少个, 看需求)
def 函数名(形参1, 形参2, ...): pass
-
调用格式:
- 实参: 实际参数(有多少个, 看形参)
函数名(实参1, 实参2, ...)
4.函数返回值(一)
-
作用: 把函数的内部的数据抛到函数的外部途径
-
定义格式:
def 函数名(形参1, 形参2, ...): 代码逻辑 return 数值
-
调用格式:
变量名 = 函数名(实参1, 实参2, ...)
-
参数: 函数外部数据传递到函数内部
-
返回值: 函数内部的数据抛到函数的外部
5.函数的文档说明
- 解释说明代码 -> 注释
- 解释说明函数 -> 函数的文档说明
- 查看函数的文档说明
- ctrl + q
- help(函数名)
6.函数的嵌套调用
- 概念: 在一个函数内部调用了另一个函数
- 结论:
- 什么时候标识着函数调用完成?
- 被调用的函数的内部代码执行完成
- 什么时候标识着函数调用完成?
7.局部变量
- 概念: 定义在函数内部的变量
- 作用域: 只能在自己的函数内部使用
8.全局变量
-
概念: 定义在函数外部的变量
-
作用域:在整个模块内部
-
总结:
-
默认情况下, 如果函数内部的变量和函数外部的变量同名, 不是一个变量一个是全局, 一个是局部
-
如果想利用函数修改全局变量的值
def func(): global 全局变量名
-
如果在函数内部使用一个变量(顺序):
- 首先在函数内部找局部变量
- 然后在函数外部的全局变量
-
9.局部和全局变量总结
-
局部变量:
- 开辟内存空间, 保存数据
- 函数内部没有可执行代码, 局部变量就被销毁, 内存回收
-
全局变量:
- 开辟内存空间, 保存数据
- 整个程序没有可执行的代码, 程序将退出, 全局变量销毁, 内存回收
10.多个return
-
作用:
- 如果函数内部出现了return 数值, 标识着是一个有返回值的函数
- 如果执行了return, 函数的调用就会提前结束(参考break记忆)
-
注意:
- 即使函数内部有return 只要有一个执行, 其他的将不再执行
11.函数调用方式总结
-
位置参数
- 实参和形参个数要统一
- 位置要一一对应
-
关键字参数
- 只需要书写正确的形参名字
-
扩展:
- 如果一个函数只能使用关键字参数调用格式:
def func(*, 形参1, 形参2, ...): pass
12.缺省参数
-
概念:如果一个函数有参数, 而且这个参数设置了默认值, 称为缺省参数
-
格式:
def 函数名(形参1, 形参2=数值): pass
-
调用函数:
-
如果缺省参数位置没有传入实参
- 使用默认值
-
如果缺省参数位置传入实参
- 实参会把默认值修改掉
- 下次在调用该函数的时候, 缺省参数还是默认值
-
-
作用:
- 简化了函数的调用
-
作用:
- 如果一个函数 有缺省参数, 那么缺省参数后面必须也是缺省参数
13.不定长参数
-
元组
-
格式:
def func(*args): pass
-
特点:
- 调用函数的时候不知道传入多少个实参
- 位置参数调用函数
- 函数内部使用下标索引获取实参的数据
-
-
字典
-
格式:
def func(**kwargs): pass
-
特点:
- 调用函数的时候不知道传入多少个实参
- 关键字参数调用函数
- 函数内部通过key获取实参的数据
-
-
共同点:
- 缺省参数
- 空的元组
- 空的字典
- 缺省参数
-
注意:
元组 def func(*args): print(args) my_list = [1, 2, 3] func(*my_list) 字典 def func(**kwargs): print(kwargs) my_dict = {'name': 'xm', 'age': 20} func(**my_dict)