相关知识---函数
1.函数参数的传递本质是从实参到新参的赋值操作。python中一切皆对象。所有赋值操作都是“引用的赋值”所以参数传递本质上是引用传递。
2.具体操作
(1)对“可变对象”的“写操作”直接作用于原对象本身
(2)对“不可变对象”的“写操作”会产生一个新的“对象空间”,并用新的值填充这些空间
(3)可变对象 :字典 列表 集合 自定义对象等
不可变对象:数字 字符串 元组 function
3.传递可变对象的引用:对同一对象的操作,没有改变原对象
4.传递不可变对象 产生新的对象 对新的对象的操作
5.浅拷贝与深拷贝
(1)浅拷贝 ::不拷贝子对象的内容,只是拷贝子对象的引用
(2)深拷贝 :连子对象的内存一起拷贝,对子对象的修改不影响源对象
6传递不可变对象包含的子对象是可变的,则方法内修改了这个可变对象,原对象也发生了变化。
(二)参数类型
1. 位置参数:函数调用时,实参按默认值位置顺序传递,需要个数和形参匹配,按位置进行的参数称为“位置参数”
2. 默认值参数:我们可以为某些参数设置默认值,这样这些参数在传递时是可选的,称为默认值参数,默认值参数放到位置参数后面
3. 命名参数(关键字参数)按形参名称传递的参数
4. 可变参数:可变数量的参数
(1)带一个星号,将多个参数收集到一个元组里边
(2)带两个星号,将多个参数收集到一个字典里边
(3)将带星号的参数尽量写在后面
(4)在带星号的“可变参数”后面增加新的参数,必须在调用的时候“强制命名参数”
四、lambda表达式和匿名函数
1.lambda表达式声明匿名函数,lambda函数是一种简单,在同一行中定义函数的方法。Lambda函数实际生成一个函数对象
2.lambda只允许包含一个表达式,不能包含复合语句。该表达式计算结果就是函数返回值。
3.语法规则 lambda 参数 :表达式
五、eval函数
1.功能:将字符串当成有效的表达式来求值并返回计算结果
2.语法:eval(source[,globals,[,locals]])->value
(1)source:一个pytohn表达式或函数compile()返回代码对象
(2)globals:可选必须是dicitionary
(3)locals:可选任意映射对象
六、递归函数
1.递归基本思想:自己调用自己
2.递归函数:自己调用自己的函数,在函数体内内部直接调用自己,每个递归必须包含两部分
(1)终止条件:递归什么时候结束,一般用于返回值不在调用自己
(2)递归步骤 把第n步值和第n-1步相关联
3.递归函数会创建大量的函数对象,谨慎使用
二、关键字
1. nonlocal用来在内部函数,声明外层的局部变量
2. Global函数内声明全局变量,然后才使用全局变量
三、LEGB规则
Python查找名称是按照LEGB原则查找的
Local Enclosed Global Built in
Local指的是函数或者类的方法内部
Enclosed:嵌套函数(一个函数包裹另一个函数)
Global :模块中的全局变量
Built in :指的是python为自己保留的特殊名称