基础
-
解释型语言和编译型语言的区别
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 ) )
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
c)使用装饰器
通过定义singleton装饰器来对相应的类进行装饰,从而使某个类只能够产生一个类
d)使用元类来实现单例模式,通过改变类的元类属性来改变类的创建方法class MyClass ( metaclass = Singleton ) : pass
- 装饰器的写法(函数装饰器,类装饰器)
- 异常处理的写法,以及如何主动抛出异常
- 什么是面向对象的MRO
- 利用json序列化时候,可以处理的数据类型有哪些?如果拓展自定义数据类型使其支持json序列化
- 什么是断言
-
with 语句的好处,以及为什么使用with语句
(未完待续)