解释型语言和编译型语言的区别
解释型语言:编译一行,执行一行,如python
编译型语言:全部代码转换成二进制程序后执行,如java
生成器和迭代器
生成器可以理解成就是迭代器,是有yield关键字的函数,使用iter()和next()获取yield返回对象,还可以使用类似(i for i in a)方法获取。这样做的目的主要是为了节约内存。
闭包
外部函数中定义一个内部函数,内部函数引用外部函数中的变量,外部函数的返回值是内部函数;
应用场景:修饰器
匿名函数
lambda函数的目的是精简代码量。一行代码实现一个功能
python2和python3区别
python2的/运算返回的是整型,python3返回类型是浮点型
python2用的是xrange,python3用的是range。xrange返回列表,range返回生成器
python2默认编码类型是ASCII,python3默认编码类型是unicode
python2print是class python3 print需要带括号
GIL锁
GIL锁是为了实现线程同步,保证当前进程中只有一个线程在执行。
__new__和__init__区别
__new__的参数是cls,__init__的参数是self
__init__是创建对象的时候默认调用
__new__有返回值 __init__无返回值
单例模式和工厂模式
单例模式:一个类只能实例化一次对象
工厂模式:根据业务需求生成不同类
值传递和引用传递
不可变对象是值传递,可变对象类型是引用传递
断言
若断言为真,则不做任何操作;否则抛出assertionerror
内存泄漏
分配内存时,由于设计缺陷,失去了对这块内存的控制,造成内存浪费。
少用del()
修饰器
在不改变代码的情况下为函数扩展功能,主要应用于日志,参数校验,权限校验。
把当前函数的内部函数以返回值的形式返回
深浅拷贝
浅拷贝:仅拷贝外部值,当被拷贝对象内部值发生改变时,浅拷贝对象内部元素不变。
深拷贝:开辟一个新的内存地址,拷贝所有引用。