复习
函数的基本类型
局部变量
name是个局部变量 是在函数内部定义的变量 作用域仅仅局限在函数内
如果在第二个函数中也定义一个name
调用
不同的函数可以定义相同的局部变量 但是作用各不相同 互不影响
局部变量的作用 为了临时的保存数据 需要在函数中定义来进行存储
全局变量
运行结果
在第二个函数中也可以引用
此处的pro即是一个全局变量 它的作用域范围为整个文件
当全局变量和局部变量出现重复定义时 程序会优先执行使用函数内部定义的变量 地头蛇
修改全局变量
发现pro并没有被修改
注意 这里在函数内部定义的相当于另一个局部变量 与外面的全局变量没有关系 故没有修改成功
若是真正想在函数内部对全局变量进行修改成功 必须使用global关键字进行声明
结果改变
引用
这说明是对同一个内存地址的引用
更改一下x的值
为什么会发生变化呢
输出一下a的值和x的值
可变类型
追加数据
打印一下内容
小结
1、在python中 万物皆对象 在函数调用的时候 实参传递的就是对象的引用
2、了解了原理之后 就可以更好的去把控 在函数内部的处理是否会影响到函数外部参数的变化
3、参数传递是通过对象引用来完成的。
匿名函数
匿名函数语法
lambda 参数1、参数2、参数3 表达式
特点
1、使用lambda关键字去创建函数
2、没有名字
3、匿名函数冒号后面的表达式有且只有一个 注意 是表达式 而不是语句
4、匿名函数自带return 而这个return的结果就是表达式计算后的结果
应用
lambda与三元运算
示例
也可以直接运用出结果
举例
lambda的缺点
只能是单个表达式 不是一个代码块 lambda的设计就是为了满足简单的函数场景 仅仅能封装有限的逻辑 复杂逻辑实现不了 必须使用def来实现
递归函数
例子
注意
利用循环实现阶乘
利用递归实现
递归函数调用过程
递归满足的条件
1、自己调用自己
2、必须有一个明确的结束条件
优点 逻辑简单、定义简单
缺点 容易导致栈溢出 内存资源紧张、甚至内存泄露
递归案例 模拟实现 树形结构的遍历
运行结果
递归函数优缺点



