2020.12.23 Python学习笔记
一、函数也是对象(内存底层分析)
对象相当于你存块
二、变量的作用域(全局变量和局部变量)
(一)全局变量:作用域为定义的模块
1、在函数和类定义之外声明的变量,作用域为定义的模块,从定义位置开始直到模块结束
2、全局变量降低了函数的通用性和可读性,应尽量避免全局变量的使用
3、全局变量一般做常量使用
4、函数内要改变全局变量的值是,使用golbal声明一下
(二)局部变量:在函数里面定义的
1、在函数体中(包含形式参数)声明的变量
2、局部变量的引用比全局变量快,优先考虑使用
3、如果局部变量和全局变量同名了,则在函数内隐藏全局变量,只使用同名的局部变量
三、局部变量和全局变量效率测试
局部变量比较快
四、参数的传递
python中的参数的传递都是“引用传递”,不是“值传递”。
可变对象:字典、列表、集合、自定义的对象
不可变对象:数字、字符串、元组、function等
五、传递不可变对象的引用
不可变对象:int float 字符串 元组 布尔值
六、深拷贝和浅拷贝
copy(浅拷贝)
deepcopy(深拷贝)
浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用
深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响原对象
七、传递不可变对象是浅拷贝
八、参数的几种类型
(一)位置参数:按位置传递的参数
(二)默认值参数:默认值参数放到位置参数后面
(三)命名参数
(四)可变参数
1、*aparam(一个星),将多个参数收集到一个“元组”对象中
2、**param(两个星号),将多个参数收集到“字典”对象中
(五)强制命名参数:在带星号的“可变参数”后面增加新的参数,必须是“强制命名参数
九、lambda表达式和匿名函数
只能做一些简单的私情
格式:
lambda arg1,arg2,arg3…:<表达式>
十、eval()函数
将字符串str当成幼小的表达式来求值并返回计算结果
十一、递归函数
自己调用自己的函数,必须哟有终止条件,要有递归步骤。