1.变量与对象
对象:内存中存储数据的实体,有明确类型
变量:指向对象的指针
Python中一切都是对象,函数也是对象
对象分为:
可变对象——对象对应内存值可以改变,变量改变后对象改变
比如列表,字典,集合
不可变对象——相反,变量改变的话会重新开辟内存,变量指向新内存——int \ float \ str \ tuple
对象引用计数为0时,对应内存被回收
2.深拷贝与浅拷贝
不可变对象——无论深浅,地址一样
可变对象——
1) 直接赋值 ——前后变量没有任何隔离
2)浅拷贝——copy()函数,拷贝第一层,不拷贝子对象,子对象仍然是引用
3) 深拷贝——deepcopy()函数,全部拷贝,前后变量完全隔离,而非引用
注意:以上两个函数都包含在copy模块中
3.作用域(?)
从内而外:
- 局部
- 嵌套
- 全局
- 内置
如何实现局部变量修改全局变量?
1)使用关键字global
2) 使用list/dict等可变对象的内置函数
4.高阶函数
指接受函数作为输入或者输出的函数
- map() ——可以将一个函数映射作用到可迭代的序列中,并返回函数输出的序列
- reduce() ——先使用输入函数对序列中的前两个元素进行操作,得到的结果再与第三个元素进行运算,知道最后一个元素
- filter() ——通过输入函数对可迭代序列进行过滤,返回满足过滤条件的可迭代序列
- sorted()——完成对可迭代序列的排序,返回一个新的列表,关键字key指定标准,reverse代表是否反向
5.匿名函数
# lambda表达式又叫匿名函数,常用来表示内部仅包含1行表达式的函数
# 如果一个函数的函数体仅有1行表达式,则该函数就可以用lambda 表达式来代替
# 语法格式:fun = lambda [可选参数列表]:表达式
# 可选参数列表相当于定义函数的时候,指定的函数列表
# fun 代表函数的返回值
# lambda表达式的意义两点:
# 1#:对于只有一行的函数,使用此方式可以省去定义函数的过程,使代码简洁明朗,"苗条健康".
# 2#:对于不需要重复使用之函数,此方式可以在用完之后,立即释放,提高程序执行的性能
def fun1(a1,a2):
return a1 + a2
fun2 = lambda a1,a2:a1+a2
def fun3():
print("孤山寺北贾亭西,水面初平云脚低。")
fun4 = lambda : print("孤山寺北贾亭西,水面初平云脚低。")
print(fun1(66, 77)