0x00:函数的基本使用
一、什么是函数
- 所谓函数,就是把具有独立功能的代码块组织为一个整体,在需要的时候调用
函数的使用包含俩个步骤:
- 定义函数——在函数中编写代码,实现功能
- 调用函数——执行编写的代码
# 函数定义
def 函数名():
函数内部代码块
二、函数的作用
- 提高代码编写效率,增加代码复用率
- 提高代码模块性
三、函数执行过程
四、函数的文档注释
- 在开发中,如果希望给函数添加文档注释,应该在定义函数下方,使用连续的一对三引号。
在连续的一对三引号之间编写对函数的说明文字
def func_cooment(): """ 函数注释说明 """ print("嘿嘿嘿")
0x01:函数的参数
一、不带参数的函数
不带参数函数的定义格式:
def 函数名字(): 函数体代码块
不带参数函数的调用格式
函数名字()
二、带参数的函数
- 函数定义时的参数叫 形参,函数调用时的参数叫 实参
带参数函数的定义格式:
def 函数名字(形参1,形参2,……): 函数体代码块
带参数函数的调用格式:
函数名字(实参1,实参2,……)
三、形参的作用域
- 作用域:变量起作用的范围
- 形参的作用域:只在定义函数的代码块中
0x02:函数的返回值
一、函数返回值的作用
- 开发中,有时候希望一个函数执行结束后,告诉调用者一个执行结果,以便调用者针对具体的结果做出后续的处理
- 返回值是函数给调用方提供的结果
二、return关键字
return
关键字只能在函数中使用- 在函数中,使用
return
关键字,可以终止函数执行,并返回一个值
三、函数默认返回值
- 函数内部没有任何return语句,默认返回None,表示没有任何返回值
- return不设置返回值,默认也返回None
四、return中断函数
- 函数一旦执行return,函数内return之后的代码将不会被执行
0x03:四种函数类型的分类
函数根据有无参数、有无返回值,可以互相组合,一共有4种:
- 无参数,无返回值
- 无参数,有返回值
- 有参数,无返回值
- 有参数,有返回值
- 定义函数时,是根据实际所需功能需求来设计的,所以不同开发人员编写的函数类型各不相同
一、无参数,无返回值的函数
def _hello():
print('Hello World!')
_hello()
二、无参数,有返回值的函数
def get_pi():
return 3.14
_pi = get_pi()
print(_pi)
三、有参数,无返回值的函数
def print_num(num):
for i in range(0, num):
print(i)
print_num(10)
四、有参数,有返回值的函数
def get_sum(n, m):
return n + m
_sum = get_sum(1, 2)
print(_sum)
五、函数的嵌套调用
- 一个函数里面又调用了另一个函数,这就是函数嵌套调用
如果函数
func02
中,调用了另外一个函数func01
- 那么执行到调用
func01
函数时,会先把函数func01
中的代码都执行完 - 才会回到
func02
中调用函数func01
的位置,继续执行后续代码
- 那么执行到调用
0x04:局部变量和全局变量
一、局部变量
- 局部变量:函数定义的形参,函数内部定义的变量
- 不同的函数,可以定义相同名字的局部变量,不同函数中的局部变量互不影响
- 局部变量的作用域只在函数内部
- 局部变量的目的是存储需要临时保存的数据
二、全局变量
全局变量
- 在函数外部定义的变量叫做全局变量
- 全局变量能够在所有的函数中进行访问(不修改)
- 函数内默认不能直接修改全局变量
通过
global
声明修改全局变量- 如果在函数汇总修改全局变量,那么就需要先使用
global
进行声明,再进行修改
- 如果在函数汇总修改全局变量,那么就需要先使用
三、全局变量与局部变量的区别
定义方式不同
- 局部变量是定义在函数内部的变量
- 全局变量是定义在函数外部的变量
作用域不同
- 局部变量只在定义所在的函数内部有效
- 全局变量在所有函数内都有效
0x05:参数详解
一、位置参数
- 函数调用时,按形参的位置,从左到右,一一匹配传递参数
- 位置参数必须一一对应,缺一不可
二、关键字参数
- 函数调用时,通过
形参=值
的方式为函数形参传值,不用按照位置为函数形参传值,这种方式叫关键字参数 注意:
- 关键字参数必须在位置参数的右边
- 对同一个形参不能重复传值
三、缺省参数
- 形参设定默认值,称为缺省参数,也叫默认参数
注意:
- 调用函数时,如果没有传入默认参数对应的实参。则使用默认值
- 默认参数必须在普通参数的后边
四、不定长参数
元组型不定长参数
- 函数可以定义不定长参数,用于接收任意数量的位置实参
形参变量名前面加上一个
*
,这个参数则为元组型不定长参数- 形参变量名一般叫:
args
- 形参变量名一般叫:
- 函数体使用不定长参数,直接使用变量名即可,无须 加
*
- 不定长参数的本质是将传递的参数包装成元组
字典型不定长参数
- 不定长参数还有一种形式,可以接收任意数量的关键字实参
定义参数时需要在形参名前加
**
,则为字典型不定长参数- 形参变量名一般叫:
kwargs
- 形参变量名一般叫:
- 函数体使用不定长参数,直接使用变量名即可,无须加
**
- 这种不定长参数会将关键字参数包装成字典
注意:
- 已经存在的形参,其对应的关键字实参不会被包装到字典中
- 字典型可变形参必须在形参列表的最后边