python面试题(完)
45 json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型?
47 isinstance作用以及应用场景?
isinstance作用:来判断一个对象是否是一个已知的类型;
其第一个参数(object)为对象,第二个参数为类型名(int...)或类型名的一个列表((int,list,float)是一个列表)。其返回值为布尔型(真 假)。
若对象的类型与参数二的类型相同则返回True。若参数二为一个元组,则若对象类型与元组中的名称相同即返回True。
48 什么是面向对象的mro
Method Realtion Order 用来制作一个继承关系的列表
MRO列表的制作原则:
1、子类永远在父类的前面
2、如果继承了多个父类,那么按照()中的顺序在列表中摆放
3、如果多个类同时继承了一个父类,孙子类中只会选取第一个父类中的父类的该方法
49 异常处理写法以及如何主动跑出异常(应用场景)
try:
print("123")
expect:
print("456")
通过raise 异常对象主动抛出异常```
50 静态方法和类方法区别
实例方法,类方法,静态方法都可以通过实例或者类调用,只不过实例方法通过类调用时需要传递实例的引用
三种方法从不同层次上来对方法进行了描述:实例方法针对的是实例,类方法针对的是类,他们都可以继承和重新定义,而静态方法则不能继承,可以认为是全局函数。
51装饰器的写法以及应用场景。
-
在不改变原函数的代码的基础上,在执行前后进行定制操作
-
def wapper(func):
def inner(*args,**kwargs):
return func(*args,**kwargs)
return inner
-
应用场景
-
flask路由
-
django csrf
-
django缓存
-
django内置认证
-
52 re的match和search区别?
-
search:在整个字符中匹配,如果找不到匹配的就返回``None
match:在字符串开始位置匹配如果不匹配就返回None
效率上match要高于search,不管是消耗时间还是内存占比search都要大于match
53 filter、map、reduce的作用?
-
map是用同样方法把所有数据都改成别的..字面意思是映 射..比如把列表的每个数都换成其平方..
-
** reduce是用某种方法依次把所有数据丢进去最后得到一个结果..字面意思是化简..比如计算一个列表所有数的和的过程,就是维持一 个部分和然后依次把每个数加进去..**
-
filter是筛选出其中满足某个条件的那些数据..字面意思是过滤..**比如挑出列表中所有奇数**..
-
>>> map(lambda x:x*x,[0,1,2,3,4,5,6])
[0, 1, 4, 9, 16, 25, 36]
>>> reduce(lambda x,y:x+y,[0,1,2,3,4,5,6])
21
>>> filter(lambda x:x&1,[0,1,2,3,4,5,6])
[1, 3, 5]
54 列举常见的内置函数?
-
1 bool
2 int
3 float
4 complex 复数
5 bin 整型转换为二进制
6 oct 整型转换为八进制
7 hex 整型转换为十六进制
8 abs 求绝对值
9 divmod (除,余数)
10 round (值,小数后几位)
12 sum
13 max
14 min
15 list
16 tuple
17 reversed
55 单例模式(类的一个实例)
a.py
class AdminSite(object):
pass
obj1 = AdminSite() #创建一个实例(单例)
b.py
#调用实例
import a
a.obj1
a.obj1
a.obj1
a.obj1
#不管调用多少次,始终只执行同一个实例
56 一行代码实现99乘法表
print ('\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))
57 三元运算规则以及应用场景?
-
三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值
-
三元运算符的功能与'if....else'流程语句一致,它在一行中书写,代码非常精炼,执行效率更高
[on_true] if [expression] else [on_false]
res = 值1 if 条件 else 值2
58.字节码和机器码的区别?
-
机器码是电脑CPU直接读取运行的机器指令,运行速度最快,难编写
-
字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码
59 实现单例模式
1.Python 的模块就是天然的单例模式,因为模块在第一次导入时,会生成 .pyc
文件,当第二次导入时,就会直接加载 .pyc
文件,而不会再次执行模块代码。
2。装饰器使用装饰器来调用call方法。
-
先执行了类的new方法(我们没写时,默认调用object.new),实例化对象;然后再执行类的init方法,对这个对象进行初始化,所有我们可以基于这个,实现单例模式。
60 metaclass作用?以及应用场景?
默认类由type创建,通过metaclass可以指定当前类是由哪一个type创建。
1.默认类由type实例化创建 2.某个类指定metaclass=Mytype,那么当前类的所有派生类都由Mytype创建 3.实例化对象
61 什么是反射?以及应用场景?
getattr
它的核心本质其实就是利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!
python的四个重要内置函数:getattr
、hasattr
、delattr
和setattr
较为全面的实现了基于字符串的反射机制。他们都是对内存内的模块进行操作,并不会对源文件进行修改。
其实,在上面的例子中,围绕的核心主题是如何利用字符串驱动不同的事件,比如导入模块、调用函数等等,这些都是python的反射机制,是一种编程方法、设计模式的体现,凝聚了高内聚、松耦合的编程思想,不能简单的用执行字符串来代替。当然,exec和eval也有它的舞台,在web框架里也经常被使用。
62 1、2、3、4、5 能组成多少个互不相同且无重复的三位数
count=0 #计数
numss=[] #初始化
for i in range(1,6): #百位循环
for j in range(1,6):#十位循环
for x in range(1,6):#个位循环
if (i!=j) and (i!=x) and(j!=x): #判断不重复的三个数
num=100*i+10*j+x
count+=1 #累加
if num not in numss:
numss.append(num) #添加到数组
print(count,numss)
63 是否使用过functools中的函数?其作用是什么
functools用于高阶函数:指那些作用于函数或者返回其他函数的函数。通常情况下,只要是可以被当做函数调用的对象就是这个模块的目标
64 面向对象中super的作用?
super() 函数是用于调用父类(超类)的一个方法。 super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
65, 列举布尔值为False的常见值?
(),[],{},0
66,[Python3和Python2中int和long的区别?]
Python3:Python3中int类型的范围是动态长度的,正整数或者负整数
Python2:Python2中long类型的范围是无限大小.