返回值
从函数里面传递到函数外的数据
怎么返回数据
return 关键字后面表达式的值
- 语法:
return 参数1,参数2,...
- 说明:
return,只能出现在函数中
将数据从函数内容从函数内部扔到函数的外部
结束函数(执行函数的时候只要遇到return函数直接结束)
- 表达式:可以一个都没有,可以有一个,也可以有多个(本质返回的是元组)。没有返回值返回None
怎么使用返回的数据
返回值就是函数调用表达式的值
普通数据能做的事,函数表达式也能做。
函数调用过程
第一步:回到函数定义的位置
第二步:传参(实参给形参赋值)
第三步:执行函数体
第四步:执行完函数体,确定返回值。(a.执行完函数体中的最后一条语句 b.遇到return),确定函数返回值(执行函数时有没有遇到return,遇到则是return后的值,没有return返回值为None。
第五步:回到函数调用的位置往后执行(这个时候函数调用表达式的值就是函数的返回值)
全局变量和局部变量
所有的数据都在堆里,保存地址的变量在栈里面
堆(存数据)
栈(存地址、函数的栈)
- 函数调用过程中内存的变化
每次在函数调用的时候,系统会自动为这个函数创建一个独立的栈空间,用来保存函数运行过程中产生的数据(函数的参数;函数的参数声明的变量);当函数调用结束后这个栈区间会自动销毁。(压栈)
1)全局变量
没有定义在函数里面或者类里面的变量就是全局变量。
作用域:从定义开始到程序结束的任何位置都可以使用
循环里面的声明的变量也是全局变量
2)局部变量
定义在函数中变量就是局部变量
作用域:从定义开始到函数结束的任何位置都可以使用
形参是局部变量,定义函数时给形参赋的默认值,其实是保存在堆里面。
3)global和nonlocal
- global:在函数中声明全局变量
- nonlocal:在局部的局部中去修改局部变量的值,使用nonlocal。
匿名函数
什么是匿名函数?
匿名函数本质还是函数,普通函数中除了定义的语法,其他全部适用于匿名函数。
lambda 形参列表:返回值
用于一些简单的函数
说明:
lambda - 关键字,固定写法
- 形参列表 - 形参1,形参2,...
-
- 固定写法
递归
在函数的内部调用函数本身(自己调用自己)
第一步:确定临界值(在临界值的位置结束函数)
第二步:找关系(找当次循环(f(n))和上一次循环(f(n-1))之间的关系
第三步:假设函数功能已经实现,用f(n-1)去实现f(n)的功能
函数就是变量
python中定义函数其实就是定义一个类型是function的变量,函数名就是变量名。
高阶函数
实参高阶函数
一个函数的参数是函数,就是实参高阶函数。
系统提供的常见的实参高阶函数
max、min、sorted:都是实参高阶函数,参数key需要一个函数;被传入的函数需要一个参数和一个返回值,这个参数指向的是序列中的元素,返回值是要比较的对象。
map:将序列中所有的元素按照函数指定的规则进行转换,返回的是转换后的序列。
reduce(函数,序列) - 对序列中的元素按照函数提供的功能进行累积的操作。函数需要两个参数只想前两个元素,需要一个返回值。
返回值高阶函数
返回值高阶函数:返回值是函数的函数