Python 面试题和答案

系统 1768 0

基础

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

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论