参数
-
位置参数和关键字参数
根据函数调用时实参的传递方式将实参分为位置参数和关键字参数
-
位置参数 - 调用函数时直接在括号中写多个实参,实参与形参一一对应
-
关键字参数 - 调用函数时以 形参名=实参 的形式来确定实参,位置不影响结果,关键字参数不能重复,不能缺少
注意:位置参数和关键字参数可以一起使用,但是位置参数必须在关键字参数的前面,不管以什么形式传参,最终每个参数都要有值
-
-
参数默认值
定义函数时,可以给形参赋默认值,若一个形参有默认值,那么这个参数调用时可以不传参数,若定义函数时有的参数有默认值,有的参数没有默认值,没有默认值的参数在又默认值的参数前面
-
不定长参数
-
定义函数时在一个参数前加*,则该参数就是不定长参数,它可以同时接收多个实参
注意:a.带*的参数本质上是一个元组
b.在调用时这个参数必须用位置参数传参
-
在定义函数时在一个参数前加**,则改参数就是不定长参数,可以同时接收多个实参
注意:a.带**的参数本质是一个字典
b.在调用这个参数时必须用关键字参数传参
思考:定义函数时经常看见函数的参数:*args,**kwargs,这样写的意义和目的是什么?
两种一起用还是实现一个参数个数不定的函数,但调用时更加灵活,既可以位置参数传参也可以关键字参数传参,还可以两种参数一起用
-
-
参数类型说明(只有说明效果,没有约束效果):参数后跟冒号和数据类型说明,可以对参数的数据类型进行说明和提醒,但不会有约束效果,即使错了也不会报错
返回值
-
什么是返回值
-
概念
返回值就是从函数内部传递到函数外部的数据
返回值就是return关键字后面的表达式的值
返回值就是函数调用表达式的值
-
return关键字
return是只能在函数体中使用的关键字,作用有两个:
a.确定函数返回值(return后面是什么函数的返回值就是什么)
b.提前结束函数(只要遇见return整个函数就直接结束)
注意:若执行函数时没有遇见return,则函数的返回值为None
-
函数调用表达式
调用函数的表达式就是函数调用表达式,当函数调用结束后,函数调用表达式的值就是函数的返回值
-
-
如何确定函数是否需要返回值
看实现函数功能是否会产生新的数据,若有则将新的数据作为返回值返回
-
函数调用过程(执行过程)
-
回到函数定义的位置
-
传参(用实参给形参赋值的过程,传参的时候必须保证 每个参数都有值)
-
执行函数体
-
执行完函数体,确定返回值
执行完函数体:a.执行到函数体的最后 b.遇到return
确定返回值:看函数执行完成时有没有遇到return,若遇到返回值就是return后的值,若没遇到返回值就是None
-
回到函数调用的位置接着往后执行(此时函数调用表达式的值就是函数返回值)
-
-
多个返回值
函数的返回值永远只有一个,若要同时返回多个数据就将多个元素作为一个容器里的元素返回容器,常用元组
变量的作用域
-
全局变量和局部变量
-
全局变量
定义在函数和类外部的变量就是全局变量
作用域:从定义开始到文件结束的任何位置都能用
-
局部变量
定义在函数里的变量
作用域:从定义开始到函数结束的任何位置都能用
-
-
global和nonlocal
global和nonlocal都只能在函数体中使用,用global可以在函数里声明一个全局变量,用global声明的变量只能在global声明后使用
nonlocal:在局部的局部中修改局部变量的值的时候使用
匿名函数
匿名函数的本质还是函数,除了定义的语法以外,其他的和普通函数没有区别
语法:
函数名 = lambda 参数列表 :返回值
相当于:
def 函数名(参数列表):
return 返回值