python面试题,


Python面试重点(基础篇)

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

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

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

    编译型和解释型

    编译型:c,java

    特点是只一次编译

    执行效率高,开发效率慢

    解释型:python

    多次编译,一行两行就可以编译一次

    执行效率低,开发效率高

     

  2. 列举Python2和Python3的区别?

    py2没中文

    py2中print加引号

    py3中print加括号

     

    py2中整数相除没有浮点数

    如果小数相除他会保一位小数

     

    py3整数相除也保留浮点数

     

    py2xrange和py3的range一样是个生成器

    py2的range是个列表,

    py3没xrange

     

     

    py2中二进制不用加前缀0b

    py3中必须加前缀

     

    py2中<>是不等于,py3没了

     

  3. 看代码写结果

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

    v1 = [1,2,3]           数字
    v2 = [(1),(2),(3)]     数字
    v3 = [(1,),(2,),(3,)]  元组
  5. 用一行代码实现数值交换。

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

    单双都是表示字符串

    三是注释

  7. is和==的区别?

    is是内存和内容都要一样

    ==是内容一样

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

    set()

    list()

  9. 如何实现字符串 name='老男孩'的反转?

    a='老男孩'
    b=a[::-1]
    print(b)

     

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

    $

    |

    -

  11. 那些情况下, y != x - (x-y)会成立?

    两个不同的集合

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

    深浅拷贝

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

    赋值,同一内存地址,多个名字

    浅拷贝:只拷贝第一层元素,不可变的没关系,可变的除非你改变内部东西,否则整体替换的话不影响浅拷贝

    深拷贝:不可变元素共用,可变元素都有自己的地址

  14. 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)   [1,2,4,5,['b','c','d'],5]
    print(c)   [1,2,4,5,['b','c','d']]
    print(a)   [1,2,4,5,['b','c','d'],5]
  16. 用Python实现9 * 9 乘法表。

    for i in range(1, 10):
       for j in range(1, i+1):
           print(f'{j}x{i}={i*j}',end=' ')
       print()
       
    1x1=1
    1x2=2 2x2=4
    1x3=3 2x3=6 3x3=9
    1x4=4 2x4=8 3x4=12 4x4=16
    1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
    1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
    1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
    1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
    1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81    

     

  17. 用Python显示一个斐波那契数列。

    输出前n项
    x=input("写几个斐波那契:")

    def m():
       a=0
       b=1
       while 1:
           a,b=b,a+b
           yield a

    for i in range(int(x)):
       print(next(m()))

    输出你要的第几项
       
    q=input("输入你要的第几项:")
    q=int(q)

    def f(n):
       if n ==0 or n==1:
           return 1
       else:
           return f(n-1)+f(n-2)

    print(f(q))

     

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

    set()变成集合

  19. 一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?

     

  20. a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?

     

  21. lambda关键字的作用?

     

  22. *arg**kwarg作用?

    在形参时

    *args接收位置参数,并将它们写到元组里输出出来

    **kwargs接收关键字参数,并将他们写到字典中输出出来

    在print时

    args输出元组

    kwargs输出字典

    *kwargs取关键字,而不是值,就是字典的键

    *args会将原来的元组打散

  23. 如何在函数中设置一个全局变量 ?

    global a=1

  24. filter、map、reduce的作用?

    filter() # 过滤 把可迭代对象进行迭代,把每一项数据都传给前面的函数,根据函数返回的True或者False来决定元素是否保留.

    map() # 对象映射 把可迭代对象中每一项函数传递给前面的函数,函数的执行结果作为整个运算的结果

    reduce 累计算,索引1和索引2计算,结果相加索引3再计算

  25. 什么是匿名函数?匿名函数有什么作用?

    lambda写法简便

  26. Python递归的最大层数?

    1000

  27. 什么是迭代器?什么是可迭代对象?

    既有__iter__又有__next__就是迭代器
    有__iter__方法就是可迭代对象

     

  28. 什么是生成器?

    函数中有yield

  29. 什么是装饰器及应用场景?

    不改动源代码,在源代码执行之前加一些操作

  30. 什么是反射及应用场景?

    用字符串去调用类中的方法

     

  31. 写一个普通的装饰器。

    def func(f):                                 
            def inner():
                    print("函数调用之前")
                    f()
                    print("函数调用之后")
            return inner
    @func               @func等于c=func(c)
    def c():
            print("调用函数中")
    c()

     

  32. 写一个带参数的装饰器。

    def wrapper(a):
       def func(f):
           def inner(k):
               print(a)
               print(type(a))
               b=int(a)
               if b:
                   ret = f(k)
                   return ret+2
               else:
                   print("sdfg")
                   return  123
           return inner
       return func
    @wrapper(int(input(">>>")))
    def foo(b):
       return b
    print(foo(3)+2)

     

  33. 求结果

    def num():
     return [lambda x:i*x for i in range(4)]
    print([m(2) for m in num()])

    6666
  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 =

    a='10.3.9.12'

    def c(n):
       a,b,c,d=n.split(".")
       a=format(int(a),'08b')
       b=format(int(b),'08b')
       c=format(int(c),'08b')
       d=format(int(d),'08b')
       return a,b,c,d
    print(c(a))
  38. 请查找一个目录下的所有文件(可能存在文件嵌套)。

  39. 求结果

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

     

  41. re的match和search区别?

    match找一个就停了

    search一直找

  42. 用Python匹配HTML tag的时候,<.>和<.?>有什么区别?

     

  43. 如何生成一个随机数?

    import random

    print(random.random())          # 0 ~ 1       0~1随机浮点数
    print(random.uniform(1,10))     # 1 ~ 10     随机浮点数
    print(random.randint(1,50))     # 1 ~ 50(闭区间)   随机整数
    print(random.randrange(1,5,2))    # randrange(起始,终止,步长)   递增集合中的随机一个数
    print(random.choice([1,2,3,4,5,])) # 选择一个元素
    print(random.choices([1,2,3,4,5,],k=2))   # 选择两(根k值有关)个元素,会有重复
    print(random.sample((1,2,3,4,5),k=2))  # 选择两个元素,不会有重复(除非只有两个)

     

  44. super的作用?

  45. 双下划线和单下划线的区别?

  46. @staticmethod和@classmethod的区别?

    静态方法,与类无关直接调用函数一样去调用该方法

    类方法,只能有类去调用的方法

  47. 实现一个单例模式(加锁)。

    import time
    import threading

    class Singleton(object):
            instance = None
            lock = threading.RLock()  #锁放类里面当属性
            
            def __new__(cls, *arg, **kwargs):
                    if cls.instance:
                            return cls.instance
                    with cls.lock:             #用类去调用锁
                            if not cls.instance:
                                    cls.instance = object.__new__(cls)
                            return cls.instance
                    
    def task():
       obj = Singleton()
       print(obj)

    for i in range(10):
       t = threading.Thread(target=task)
       t.start()

     

  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


    1 1 1
    1 2 1
    3 2 3
  50. 参考下面代码片段

    class Context:
       pass

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

第二部分 可选题

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

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

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

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

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

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

  7.  

 

相关内容

    暂无相关文章

评论关闭