基础
解释型语言和编译型语言的区别
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语句
(未完待续)