基础
解释型语言和编译型语言的区别 a) 编译型语言是在运行之前对源码进行编译,使其成为机器可以识别的机器语言 b) 解释型语言不需要编译,而是在语句执行时候才将语句翻译为机器语言 c)解释型语言相对于编译型语言来说由于执行时候需要翻译,因此效率比较低 Python 解释器种类和特点 a)CPython(使用最广) b)IPython(交互式解释器) c)PyPy(显著提高执行效率) d)Jpython e)IronPython 位和字节的关系 a)1 byte = 8 bits Python进制转换 a)使用int() 十进制:二进制 b)hex() 十六进制 c)bin() 二进制 d)oct() 八进制 Python递归的最大层数? a) 998 b)可以通过一下代码来设置sys. setrecursionlimit( )
ascii、unicode、utf-8、gbk的区别 a)ascii是英语字符和二进制数之间的关系。一共规定了128个字符的编码 b)Unicode是一个更大的字符和二进制之前的对应关系,一共容纳100多万个字符 c)UTF-8是Unicode最广的实现方式 d)gbk? 字节码和机器码的区别? a)机器码是机器可以识别,可以直接在机器上运行的二进制 b)字节码来自源码,由编译器编译源码而形成的二进制文件,可以在不同的运行环境中,通过虚拟运行环境来在机器上执行 三元运算规则 a)condistion_true if condition else condistion_false b) 用一行代码实现数值交换 a)a, b = b, a xrange 和 range的区别 a)xrange 生成的是一个生成器,range生成的是一个list对象 b)要生成很大的数字序列的时候,使用xrange会比使用range性能更优 lambda 表达式格式以及应用场景 a)lambda x: func_body b)常用来作为函数参数输入函数,像是作为sort的key parameter pass的作用 a)作为占位符,来保证程序结构的完整性 *args 和 **kwarg 的作用 a)*args 是用来传入任意数量的位置参数 b)*kwarg是传入任意数量的关键字参数 is 和 ==的区别 a)is 和==都是用来 比较python对象的 b)python对象包含三个基本元素, id, type(数据类型), value(值) c)is 比较对象id, 判断对象是否为同一实例对象,是否指向同一内存地址 e)== 判断是,两个对象的内容是否相等 python的深浅拷贝和应用场景 a)浅拷贝:创造新的对象 b)深拷贝:使用旧的对象 c)copy.copy() 创造浅拷贝, 注意有的时候会是深拷贝 d)copy.deepcopy() 创造深拷贝 Python 的垃圾回收机制 a) 引用计数机制为主,标记-清除和分代收集为辅 常见的内置函数 a)abs(), all(), set(), any(), dict(), dir(), b)enumerate(), eval() c)filter(), map(), float(), input(), len(), e) open(),round(), sorted() python可变类型和不可变类型 a)string, tuple, number 是不可变的 b)list,dict是可变的 对不可变对象赋值,是重新创建一个对象,并将指针指向新的对象,并销毁旧有对象 对可变对象,是在同一内存地址,在原处修改 因此可变对象作为函数参数时候,要小心在函数内对可变对象的修改 re模块中match 和 search的区别 a)match是从字符串开始位置检测,如果开始位置不符合则返回 b)search会从任意位置开始检测(搜索整个字符串),直到发现符合的再返回 c)match比search的速度快 什么是正则表达式的贪婪匹配? a)在整个表达式匹配成功的前提下,尽可能多的去匹配,有多少要多少,尽可能多的 ()会产生生成器,[]会产生列表 可变类型作为函数默认参数 a)默认参数只是在函数定义的时候被初始化一次,而且因为是可变类型,因此全局只保存一个实例,所以任何在默认参数上的操作都会反映到指向他的对象上 b)如果要使用object作为默认参数,尽量使用None,而不是相关类型 一行实现删除列表中重复元素 a) 元素位置会被打乱list_item = [ 1 , 1 , 2 , 3 , 3 ]
print ( list ( set ( list_item) )
b)保持元素位置 list_item = [ 1 , 1 , 2 , 2 , 3 ]
print ( sorted ( set ( list_item) , keys= list_item. index) )
```
如何在函数中设置全局变量? a)使用global关键字 如何用代码实现stack
class Stack ( object ) :
def __init__ ( self) :
self. items = [ ]
def is_empty ( self) :
return self. items == [ ]
def size ( self) :
return len ( self. items)
def pop ( self) :
return self. items. pop( )
def push ( self, val) :
return self. items. append( val)
如何生成一个随机数 a)random package random.randint(start, end) random.choice(seq) random.choices(seq, k) random.sample(seq, k) random.random() float number from 0 to 1 b) numpy.random package 常用的字符串格式化 a)用数字指定位置 b)为位置命名,可以传入字典变量 c)可以传入对象,并调用对象属性 d){:.2f} e) {:+.2f} f) {:0 > 2d}数字左边补零,宽度为2 g) {:0<4d} 数字右边补零,宽度为4 h) {:,} 用逗号分隔数字 i) {:.2 %}百分比格式 k) {:.2e} 指数计数法格式 l){:10d}, {:<10d}, {:^10d}, 右对齐,左对齐,中间对齐 functools中的函数作用? a)作用于一些定义好的函数,帮助我们更好的实现对函数的包装和实用 实例方法,静态方法和类方法的区别和应用 a)参数不同,实例方法参数必须有self, 类方法必须有cls, 静态方法可以啥也没有 b)继承时,子类调用父类静态方法,调用的是父类的雷属性,而调用类方法时,调用的是子类的类属性 如何判断变量是否为nan a)==不能够使用,可以使用is,但有时候会出错 b)最好使用math中的isnan, math.isnan() 列举面向对象中的特殊成员以及应用场景 a)成员 a. __dict__成员:以字典的方式来获取类或对象中的所有成员 b)方法 b. __call__方法:执行对象的构造方法 c. getitem (self, item): 类似于一种运算符重载(重载[]运算符) d. setitem (self, key, item): 设置对象的相关属性 e. delitem (self, key): 删除对象相关属性 f. iter (self): 保证对象可以被for循环迭代,这样每次产生一个元素 python反射(自省?) a)我们需要执行对象的某个方法或对对象的某个属性赋值,但是方法名和属性名在调用的时候不知道。因此我们需要通过某个机制来访问未知的属性,反射就是这样的一个机制 b)dir(obj) 返回对象的属性名列表 c)hasattr(obj, attr) 判断对象是否有一个attr的属性 d)getattr(obj, attr) 返回对象的属性值 e)setattr(obj, attr, val) 为对象赋相应的属性值 f)inspect模块提供了一系列函数来帮助我们实现自省机制 判断是函数还是方法? metaclass 作用? a)原类将用在创建使用了它的新类调用中 b)包装类的所有方法,用以日志记录或者性能剖析 c)自动mix-in新方法(不在需要编写mix类) 单例模式 a)使用模块,模块在第一次导入时,会生成.pyc文件,当第二次导入时,就会加载.pyc文件,因此我们将需要维持一个单例的对象在模块中创建,则对象将维持同一单例 b)__new__使用该方法来创建实例对象Class Singleton ( object ) :
_instance = None
def __new__ ( cls, * args, ** kwargs) :
if cls. _instance is not None :
cls. _instance = object . __new__( cls, * args, ** kwargs)
return cls. _instance
可以参见享原模式(flyweight pattern)单例模式是一种特殊的享元模式 c)使用装饰器 通过定义singleton装饰器来对相应的类进行装饰,从而使某个类只能够产生一个类 d)使用元类来实现单例模式,通过改变类的元类属性来改变类的创建方法class MyClass ( metaclass= Singleton) :
pass
装饰器的写法(函数装饰器,类装饰器) 异常处理的写法,以及如何主动抛出异常 什么是面向对象的MRO 利用json序列化时候,可以处理的数据类型有哪些?如果拓展自定义数据类型使其支持json序列化 什么是断言 with 语句的好处,以及为什么使用with语句 (未完待续)