python面试题

Python面试重点(基础篇)

注意:只有必答题部分计算分值,补充题不计算分值。

第一部分 必答题(每题2分)

  1. 简述列举了解的编程语言及语言间的区别?

    编译型:一次性翻译   (C)
    优点:运行速度快
    缺点:翻译时间长

    解释型:一行一行翻译(Python)
    优点:开发效率高(翻译时间短)
    缺点:运行速度慢
  2. 列举Python2和Python3的区别?

    • Python2:
      • 源码不统一,源码重复
      • input接受到的是数据本身
      • 整除返回的是整数(向下取整)
      • 打印range(10) 是一个列表,内容是[0-9]
      • 整形型,长整型
      • 默认编码是ascll,不支持中文名
    • Python3:
      • 源码统一,源码不重复
      • input接收到的是字符串
      • 整除返回的是浮点数(小数)
      • 打印range(10)就是本身
      • 全是整型
      • 默认编码是Unicode,支持中文
  3. 看代码写结果

    v1 = 1 or 2
    v2 = 3 and 7 or 9 and 0
    v1 = 1
    v2 = 0
  4. 比较以下值有什么不同?

    v1 = [1,2,3]       
    v2 = [(1),(2),(3)]
    v3 = [(1,),(2,),(3,)]
    • v1和v2都是一个列表里面有3个元素
    • v3是一个列表里面有三个元组
  5. 用一行代码实现数值交换。

    a = 1
    b = 2
    a,b=b,a
  6. Python中单引号、双引号、三引号的区别?

    python中单双引号可以互相包含,避免转义,
    而三引号有两种作用 长字符串的换行,以及注释
  7. is和==的区别?is 是判断内存地址是否一致 == 是判断两个对象的值是否相等

  8. python里如何实现tuple和list的转化?

    tuple(list) 
    list(tuple)
  9. 如何实现字符串 name='老男孩'的反转?      name = "老男孩" name = name[::-1]

  10. 两个set如何获取交集、并集、差集?

    交集:set1 & set2

    并集: set1 | set2

    差集: set1 -set2

  11. 那些情况下, y != x - (x-y)会成立?        x,y是两个不相等的非空集合

  12. Python中如何拷贝一个对象?

    copy.copy 
    copy.deepcopy
  13. 简述 赋值、浅拷贝、深拷贝的区别?

    赋值:将多个变量指向同一个内存地址
    浅拷贝:只拷贝第一层元素地址,只有修改第一层元素时不受影响
    深拷贝:不可变数据类型内存地址共用,可变数据类型重新开辟空间
  14. pass的作用?

    pass占位符
    pass的作用是位了保证程序结构的完整性,否则会报错
  15. 阅读代码写结果。

    import copy
    a = [1,2,4,5,['b','c']]
    b = a
    c = copy.copy(a)
    d = copy.deepcopy(a)

    a.append(5)
    a[4].append('d')

    print(b)
    print(c)
    print(a)
    [1, 2, 4, 5, ['b', 'c', 'd'], 5]
    [1, 2, 4, 5, ['b', 'c', 'd']]
    [1, 2, 4, 5, ['b', 'c', 'd'], 5]
  16. 用Python实现9 * 9 乘法表。

    for a in range(1,10):
       for b in  range(a,10):
           print(f'{a}*{b}={a*b}',end='')
       print()
  17. 用Python显示一个斐波那契数列。

  18. 如何删除列表中重复的值?

    a= []
    a= list(set(a))
    print(a)
  19. 一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?

    with open('./etl_log.txt','r',encoding='utf-8') as f:
       for i in f:
           print(i)
  20. a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?

    a = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
  21. lambda关键字的作用?

    定义一个匿名函数
  22. *arg**kwarg作用?

    *args 接收多余的位置参数
    **kwargs 接收多余的关键字参数
  23. 如何在函数中设置一个全局变量 ? 

    global name
  24. filter、map、reduce的作用?

    filter  过滤
    map   映射
    reduce 累计算
  25. 什么是匿名函数?匿名函数有什么作用?

    lambda函数就是匿名函数
    作用:配合高阶函数进行使用,简化代码
  26. Python递归的最大层数?

    官方1000  实际994-998
  27. 什么是迭代器?什么是可迭代对象?

    具有__iter__()和__next__()方法的就是迭代器
    具有__iter__()方法的就是可迭代对象
  28. 什么是生成器?

    生成器的本质就是迭代器,具有yield关键子就是生成器
  29. 什么是装饰器及应用场景?

    装饰器本质闭包,不修改源代码及调用方式下,额外增加功能
    登录验证
  30. 什么是反射及应用场景?

    通过字符串操作对象的方法和属性
    应用场景:
    用户输入,判断选择
  31. 写一个普通的装饰器。

    ef warpper(func):
        def inner():
            print("111")
            func()
            print("222")
        return inner
    
    @warpper
    def func():
        print("被装饰的函数")
  32. 写一个带参数的装饰器。

    def warpper(func):
        def inner(*args,**kwargs):
            print("我是装饰器,装饰你了啊")
            ret = func(*args,**kwargs)
            return ret
        return inner
    
    @func_z
    def func_b(*args,**kwargs):
        print("我是被装饰的函数")
  33. 求结果

    def num():
     return [lambda x:i*x for i in range(4)]
    print([m(2) for m in num()])
    [6, 6, 6, 6]
  34. def(a, b=[])这种写法有什么陷阱?

    默认参数是可变数据类型,闭包
  35. 看代码写结果

    def func(a,b=[]):
       b.append(a)
    return b

    v1 = func(1)
    v2 = func(2,[10,20])
    v3 = func(3)
    print(v1,v2,v3)
    [1, 3] [10, 20, 2] [1, 3]
  36. 看代码写结果

    def func(a,b=[]):
       b.append(a)
    return b

    v1 = func(1)
    print(v1)
    v2 = func(2,[10,20])
    print(v2)
    v3 = func(3)
    print(v3)
    [1]
    [10, 20, 2]
    [1, 3]
  37. 请编写一个函数实现将IP地址转换成一个整数。

    10.3.9.12 转换规则为:
           10            00001010
            3            00000011
            9            00001001
           12            00001100
           
    再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 =
  38. 请查找一个目录下的所有文件(可能存在文件嵌套)。

    import os
    os.listdir()
  39. 求结果

    import math
    print (math.floor(5.5))
    5
  40. 是否使用过functools中的函数?其作用是什么?     reduce 累计算

  41. re的match和search区别?

    match 从开头进行匹配,匹配一个就停止
    serach 从任意位置进行匹配,匹配一个就停止
  42. 用Python匹配HTML tag的时候,<.>和<.?>有什么区别?

    . 贪婪匹配,匹配多个任意字符
    .*?非贪婪,只匹配一次
  43. 如何生成一个随机数?

    import random
    random.random()
  44. super的作用?

    按照mro的顺序进行继承
  45. 双下划线和单下划线的区别?

    __a = 1 强制私有
    _b = 2 程序员约定俗成的一个私有方法
  46. @staticmethod和@classmethod的区别?

    一个是静态方法 ,普通函数
    一个是类方法
  47. 实现一个单例模式(加锁)。

  48. 栈和队列的区别?

    栈 先进后出
    队列 先进先出
  49. 以下代码输出是什么? 请给出答案并解释。

    class Parent(object):
       x = 1

    class Child1(Parent):
       pass

    class Child2(Parent):
       pass

    print Parent.x, Child1.x, Child2.x

    Child1.x = 2
    print Parent.x, Child1.x, Child2.x

    Parent.x = 3
    print Parent.x, Child1.x, Child2.x
  50. 参考下面代码片段

    class Context:
       pass

    with Content() as ctx:
       ctx.do_something()
    请在Context类下添加代码完成该类的实现

第二部分 可选题

  1. 如何获取列表中第二大的值?

  2. 简述Python内存管理机制。

  3. 简述Python的垃圾回收机制。

  4. 请用两个队列来实现一个栈。

  5. 请用Python实现一个链表。

  6. 请用Python实现链表的逆转。

  7.  

 

posted @ 2020-02-26 12:17  潇洒君  阅读(61)  评论(0)    收藏  举报