1. 函数的作用: 对重复代码块的封装, 达到了代码的重复利用
2. 语法:
def 函数名([形式参数]):
函数体(重复代码块)
# 返回数据
return 数据
3. 函数定义三部曲
确定函数名: 见名之意, 理解函数的功能
确定形式参数: 函数体中是否有未知数参与运算,如果有就将其定义为形式参数
确定返回值:
1. 如果在后面的代码需要使用函数中的运算结果,就需要在函数中使用return返回运算结果
2. 如果不确定是否需要返回,建议返回
3. 要求函数调用后获取/得到 ..., 也要返回
4. 只要当要求是 输出/处理后不需要返回, 这个时候才不返回
4. pass 空语句
作用: 为了保证语句的完整语法结构, 如果没有清楚具体写什么,可以先使用pass占位
5. 函数的注释: 对函数的解释和说明
语法: 在函数名下,缩进的里面 通过 三引号 进行注释
def 函数名([形式参数]):
"""
函数的功能简介
参数说明
:param 参数名: 说明
:return: 数据类型 说明
"""
pass
6. 函数参数加强
1) 必传参数
没有默认值得参数就是必须参数
2) 默认参数
给参数一个默认值, 不传该参数就使用默认值,如果传递该参数就使用传入的值
def 函数名(a,b,c=10):
pass
默认值参数必须跟在无默认值参数的后面
3) 关键字参数
在函数调用的时候, 可以给实际参数进行命名(名字=形参名), 好处是可以交换实参的顺序
函数名(a=值,b=值,c=值)
7函数加强
7.1打包
函数定义的时候
按位置参数打包,使用 *args 打包所有的位置参数为一个元组
按关键字参数打包, 使用 **kwargs 打包所有的关键字参数为一个字典
什么时候使用打包: 不确定参数的数量的时候
def 函数名(*args,**kwargs):
pass
7.2拆包
函数调用的时候
特点的情况
按位置参数进行拆包, 如果 元组/列表/字典.values() 中数据的顺序和实际参数的顺序是一致的时候,
就可以使用 *元组/列表/字典.values() 进行拆包传递给函数作为实际参数, 好处是不用依次从容器中取.
按关键字参数进行拆包, 如果字典中的键就是关键参数的名字, 使用 **字典 对字典进行拆包传递给函数作为实际参数.
函数名(*元组/列表/字典.values())===>函数名(元素1,元素2....)
函数名(**字典) ===>函数名(键=值....)
return返回值加强
-
return作用
a. 返回数据到函数的调用位置
b. 终止函数执行(退出函数) -
返回None
a. 没有return
b. return (后面什么都没有)
c. return None -
返回多个值
return 值1,值2 -
函数中可以有多个return, 需要控制语句控制执行
变量的作用域
两种:
全局变量: 作为范围为任意位置
注意:
1. 访问是任意位置
2. 修改, 函数外可以修改, 函数内 可以间接修改(通过 global 全局变量名 引入全局变量, 再修改)
局部变量: 只能在函数内部使用
如果使用:
1. 如果只在函数中使用, 就使用局部变量, 节约内存资源