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装饰器的写法以及应用场景。
  1. 在不改变原函数的代码的基础上,在执行前后进行定制操作

  2. def wapper(func):
    def inner(*args,**kwargs):
    return func(*args,**kwargs)
       return inner

    @wapper
    def index(s):
    return s+100
    print(index(10))
  3. 应用场景

    1. flask路由

    2. django csrf

    3. django缓存

    4. django内置认证

52 re的match和search区别?
  1. search:在整个字符中匹配,如果找不到匹配的就返回``None
    match:在字符串开始位置匹配如果不匹配就返回None
    效率上match要高于search,不管是消耗时间还是内存占比search都要大于match
53 filter、map、reduce的作用?
  1. map是用同样方法把所有数据都改成别的..字面意思是映 射..比如把列表的每个数都换成其平方..

  2. ** reduce是用某种方法依次把所有数据丢进去最后得到一个结果..字面意思是化简..比如计算一个列表所有数的和的过程,就是维持一 个部分和然后依次把每个数加进去..**

  3. filter是筛选出其中满足某个条件的那些数据..字面意思是过滤..**比如挑出列表中所有奇数**..

  4. >>> 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. 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 

    1634002179170.png

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 三元运算规则以及应用场景?
  1. 三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值

  2. 三元运算符的功能与'if....else'流程语句一致,它在一行中书写,代码非常精炼,执行效率更高
    [on_true] if [expression] else [on_false]

        res = 值1 if 条件 else 值2
58.字节码和机器码的区别?
  1. 机器码是电脑CPU直接读取运行的机器指令,运行速度最快,难编写

  2. 字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码

59 实现单例模式

1.Python 的模块就是天然的单例模式,因为模块在第一次导入时,会生成 .pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。

2。装饰器使用装饰器来调用call方法。

  1. 先执行了类的new方法(我们没写时,默认调用object.new),实例化对象;然后再执行类的init方法,对这个对象进行初始化,所有我们可以基于这个,实现单例模式。

 

60 metaclass作用?以及应用场景?

默认类由type创建,通过metaclass可以指定当前类是由哪一个type创建。

1.默认类由type实例化创建 2.某个类指定metaclass=Mytype,那么当前类的所有派生类都由Mytype创建 3.实例化对象

61 什么是反射?以及应用场景?

getattr

它的核心本质其实就是利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!

python的四个重要内置函数:getattrhasattrdelattrsetattr较为全面的实现了基于字符串的反射机制。他们都是对内存内的模块进行操作,并不会对源文件进行修改。

其实,在上面的例子中,围绕的核心主题是如何利用字符串驱动不同的事件,比如导入模块、调用函数等等,这些都是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类型的范围是无限大小.

 

posted @ 2021-10-31 10:49  史可轩  阅读(41)  评论(0编辑  收藏  举报
3 4