Python面试重点(基础篇)

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

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

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

    c语言是编译型语言,运行速度快,但翻译时间长
    python是解释性语言,开发效率高,但运行速度慢
    java必须声明变量,python并不需要声明变量
    编译型语言:一次性全部编译成二进制码,再去运行
    解释型语言:编译一行,运行一行
    python 解释型 简洁高效 容易上手
    java   混合型 (JVM,JIT编译器) 学习成本高,开发周期慢,web方向
    c     编译型 底层语言,只有面向过程,没有面向对象
    c++   编译型 底层语言,面向过程,面向过程都有
    go     编译型 应用在区块链 高并发高可用 游戏方向
  2. 列举Python2和Python3的区别?

    python2:1.源码不统一,源码重复,有整型int和长整形long,使用asii编码,print后不用加括号
    2.range不是可迭代对象 返回list
    3.2种类 经典类和新式类
    class Car():pass 经典类(多继承当中的搜索原则深度优先)
    class Car(object):pass 新式类(多继承当中的搜索原则广度优先)
    4.除法:结果是整型
    5.input   raw_input => 等价于python input
    python3:1.源码统一,源码不重复,全都是整型,使用utf-8编码,print'后必须加括号
    2.range 返回的 可迭代对象
    3.都是新式类
    4.除法:结果是小数
  3. 看代码写结果

    v1 = 1 or 2   1
    v2 = 3 and 7 or 9 and 0  7

    and 全真则真  一假则假
    or  一真则真  全假则假
    逻辑运算符优先级 () >not > and > or
    True or 表达式 => True
    False and 表达式 => False
  4. 比较以下值有什么不同?

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

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

    单双引号都可以在括号内使用(" '内容' ")
    三引号可以显示多行,注释
    单双引号没有区别,三引号可以支持跨行
  7. is和==的区别?

    is判断两边的内存地址是否相等
    ==判断等号两边的值是否相等
  8. python里如何实现tuple和list的转化?

    list=[1,2,3,4,5,6]
    x=tuple(list)
    print(type(x),x)


    tup=(1,2,3,4,5,6)
    y=list(tup)
    print(type(y),y)
  9. 如何实现字符串 name='老男孩'的反转?

    使用字符串切片 name1=name[::-1]
  10. 两个set如何获取交集、并集、差集?

    a=set('asdfg')
    b=set('qwert')
    交集:
    print(x&y)
    并集:
    print(x|y)
    差集:
    print(x-y)
  11. 那些情况下, y != x - (x-y)会成立?

    x和y是两个不相等的非空集合的情况下
  12. Python中如何拷贝一个对象?

    可以使用浅拷贝拷贝父对象,也可以copy模块的deepcopy完全拷贝父对象和子对象

    import copy
    针对于列表的拷贝,还可以使用[:], [::],浅拷贝的一种方式
    list1=[1,2,3]
    list2=list1[:]
    list1.append(4)
    print(list2)
  13. 简述 赋值、浅拷贝、深拷贝的区别?

    赋值是将多个变量指向同一个内存地址
    浅拷贝是只拷贝第一层元素的地址
    深拷贝是完全拷贝原来的对象,拷贝后的对象是新的对象


    赋值:将变量和值在内存中形成映射指向关系
    浅拷贝是只拷贝第一层元素的地址copy.copy
    深拷贝是为所有层级的元素都单独开启新空间 copy.deepcopy() 地址:原不可变数据只是暂时的指向,可变的数据独立开辟新空间
  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)
    print(c)
    print(a)
    a = b [1,2,4,5,['b','c','d'],5]
    c [1,2,4,5,['b','c','d']]
  16. 用Python实现9 * 9 乘法表。

    l=1
    i=0
    while l<10:
      i=1
      while i<=l:
          if i==l:
              print(i,'*',l,'=',l*i)
          else:
              print(i,'*',l,'=',l*i,end=' ')

          i += 1
      l += 1
  17. 用Python显示一个斐波那契数列。

     a,b = 0, 1
    while b<100:
        print (b),
        a, b = b, a+b
    1.
    list = [1,1]
    for i in range(10):
    list.append(list[-1] + list[-2])
    print(list)
    2.
    a,b = 0,1
    for i in range(10):
    print(b)
    a,b = b, a+b
    3.
    def fib(n):
    if n <=2:
    return 1
    return fib(n-1) fib(n-2)
    print(fib(5))
  18. 如何删除列表中重复的值?

    list1=["1","1","2","3list1"]
    list1=list(set(list1))
    list1.remove("1")
    print(list1)
    print(list(set(list1)))
    print(sorted(list(set(list1))))
    在列表中元素值少的情况下,可以直接用索引删除指定重复的值
  19. 一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?

    def read_line(path):
      with open(path, 'r', encoding='utf-8') as f:
          line = f.readline()
          while line:
              line = f.readline()
              print(line)
  20. a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?

    强转字典的条件:等长的耳机容器,配合强转字典的两个函数 zip,enumerate
    # zip 拉链
    a = dict(zip(("a","b"),[1,2]))
    print(a)
    #enumerate 枚举
    a = dict(enumerate(["a","b"]))
    a = dict(enumerate(["a","b"],sart = 10))
    print(a)
  21. lambda关键字的作用?

    lambda 匿名函数:用一句话表达只有返回值的无名函数
    lambda 参数: 返回值
  22. *arg**kwarg作用?

    在定义函数时,允许我们传入多个实参
    *args 普通收集参数 :收集多余的没人要的普通实参
    **kwargs 关键字收集参数: 收集所欲的没人要的关键字实参
  23. 如何在函数中设置一个全局变量 ?

    def func():
    global a
    a = 90
    func()
    print(a)
  24. filter、map、reduce的作用?

    filter => 过滤数据
    iterable: 可迭代对象(range,容器类型数据,迭代器)
    filter(func,iterzble) =>返回迭代器

    map => 处理(映射)数据
    map(func,iterable) =>返回迭代器
    list1 = [1,2,3]
    it = map(lambda x : x*3,list1)
    print(list(it))

    reduce => 计算数据
    from functools import reduce
    reduce(func,iterable) =>最后计算的值
    list2=[1,2,3,4]
    res = reduce(lambda x, y : x*10 +y ,list2)
    print(res,type(res))
  25. 什么是匿名函数?匿名函数有什么作用?

    用一句话表达只有返回值的无名函数
    配合高阶函数使用
  26. Python递归的最大层数?

    官方说法1000,实际测试994~1000
  27. 什么是迭代器?什么是可迭代对象?

    迭代器是一个对象且迭代器只能使用一次
    迭代器生辰后的对象就是迭代器对象

    具有__iter__()和__next__()这两个方法的就是迭代器
    具有__iter__()方法的就是可迭代对象
    dir(数据) 可以查看该数据的内部系统成员
    可迭代对象=>迭代器 把不能直接别next获取 => 可直接获取到该数据的一个过程
  28. 什么是生成器?

    生成器是一次生成一个值的特殊类型函数,生成器的本质就是迭代器

    生成器的本质就是迭代器,可以自定义迭代的逻辑
    创建方式两种:
    1.生成器表达式(推导式) (i for i in range(3))
    2.生成器函数 (含有yield关键字)
  29. 什么是装饰器及应用场景?

    装饰器本质上是闭包,它可以在让其他函数在不需要做任何代码的变动的前提下增加额外的功能;
    应用场景:
    计算函数运行次数;
    插入日志,作为函数的运行日志;
    缓存,实现缓存处理;
  30. 什么是反射及应用场景?

    通过字符串操作类对象或者模块中的属性和方法
    应用: 可以配合用户的操作或者输入,调用其中的成员,api接口
  31. 写一个普通的装饰器。

    闭包:内函数使用了外函数的局部变量,外函数把内函数返回出来的过程叫做闭包
    这个内函数叫做闭包函数
    特点:如果内函数使用了外函数的局部变量,那么该变量于内函数发生绑定,延长该变量的生命周期
    def warpper(f):
      def inner(*args,**kwargs):
          print("被装饰函数执行前")
          ret = f(*args,**kwargs)
          print("被装饰函数执行后")
          return ret
      return inner
    def func(*args,**kwargs):
      print(f"被装饰的{args,kwargs}")
      return "这是func函数"
    func = warpper(func)
    print(func(1,2,3,a=1))
  32. 写一个带参数的装饰器。

    def auth(argv):--接收参数
      def warpper(func):
          def inner(*args,**kwargs):
              if argv == '博客园':
                  print('欢迎登陆博客园')
                  user = input(userse)
                  pwd = input('pwd')
                  if user =='alex' and pwd =='ds12':
                      func(*args,**kwargs)
                elif argv == '码云':
                  print('欢迎登陆码云')
                  user = input(userse)
                    pwd = input('pwd')
                    if user =='ale' and pwd =='ds23':
                      func(*args,**kwargs)
          return inner
      return warpper

    def foo():
    print('被装饰的函数')
    a = auth("111")
    foo = a(foo)
    foo()
  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=[])这种写法有什么陷阱?

    当第一次执行的时候实例化了一个list,第二次执行还是用第一次执行的时候实例化的地址存储,所以三次执行的结果就是 [1, 1, 1] 
    b身上的默认值是列表,如果使用原来默认的参数,调用func函数会把几次调用的值都放在同一个默认列表里
  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,3]
  37. 请编写一个函数实现将IP地址转换成一个整数。

    如 10.3.9.12 转换规则为:
           10            00001010
            3            00000011
            9            00001001
           12            00001100
           
    再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
    1.
    ljust 原字符串居左,填充符号
    rjust 原字符串居右,填充符号
    ip="10.3.9.12"
    strvar = ""
    for i in ip.split("."):
       bin_str = str(bin(int(i)))[2:]
       strvar += bin_str.rjust(8,"0")
       print(strvar)
    # 把二进制 字符串转换成十进制,默认转换时,是十进制
    print(int(strvar,2))

    2.
    ip = "10.3.9.12"
    strvar = ""
    for i in ip.split("."):
       strvar +=format(int(i),"08b")
    print(int(strvar,2))
  38. 请查找一个目录下的所有文件(可能存在文件嵌套)。

  39. 求结果

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

    生成一个固定参数的新函数
  41. re的match和search区别?

    match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none
    search()会扫描整个字符串并返回第一个成功的匹配:
  42. 用Python匹配HTML tag的时候,<.>和<.?>有什么区别?

    <.*>尽可能多的匹配,就是匹配到的字符串尽量长,<.*?>是尽可能少的匹配,就是匹配到的字符串尽量短。
  43. 如何生成一个随机数?

    import random
    
    print(random.randint(0,9))
  44. super的作用?

    可以在子类中调用父类的方法或属性
  45. 双下划线和单下划线的区别?

    __name是私有变量,只有内部可以访问,外部访问不了
    _name是"可以被访问,但是是私有变量"
  46. @staticmethod和@classmethod的区别?

    @staticmethod不需要表示自身对象的self和自身类的参数而@classmethod也不需要self参数,但第一个参数需要是表示自身类的参数
  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类下添加代码完成该类的实现
    class Sample:
       def __enter__(self):
           return self

       def __exit__(self, type, value, trace):
           print("type:", type)
           print("value:", value)
           print("trace:", trace)
           print(sample)


       def do_something(self):
           bar = 1
           return bar + 10

    with Sample() as sample:
       sample.do_something()

第二部分 可选题

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

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

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

    当Python的某个对象的引用计数降为0时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾。
  4. 请用两个队列来实现一个栈。

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

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

Python面试2未完待续的更多相关文章

  1. [python]爬代理ip v2.0(未完待续)

    爬代理ip 所有的代码都放到了我的github上面, HTTP代理常识 HTTP代理按匿名度可分为透明代理.匿名代理和高度匿名代理. 特别感谢:勤奋的小孩 在评论中指出我文章中的错误. REMOTE_ ...

  2. Day4-内置函数--未完待续,慢慢写

    内置函数:https://docs.python.org/3/library/functions.html?highlight=built#ascii 未完待续....

  3. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  4. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

  5. ASP.NET MVC 系列随笔汇总[未完待续……]

    ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...

  6. 关于DOM的一些总结(未完待续......)

    DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.query ...

  7. 我的SQL总结---未完待续

    我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...

  8. virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)

    virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...

  9. MVC丶 (未完待续······)

         希望你看了此小随 可以实现自己的MVC框架     也祝所有的程序员身体健康一切安好                                                     ...

随机推荐

  1. LoRa基础知识

    摘自:LoRaWAN介绍 - LoRa从业者读这篇就够了 https://blog.csdn.net/iotisan/article/details/69939241    LoRa网络结构      ...

  2. Python 基础之面向对象之八步理解装饰器

    装饰器:在不改变原有代码的情况下,为该原函数扩展新功能特征:返回新函数,替换旧函数语法:@ 语法糖 1.装饰器原型 #例1: def kuozhan(func):    def newfunc():  ...

  3. cmd命令下载maven管理需要的依赖jar包

    首先在maven官网https://mvnrepository.com/  搜索你需要的jar包,找到下面的下载链接,在修改命令,然后cmd下载. cmd命令下载Maven需要jar包 cmd输入下面 ...

  4. Python编程使用PyQT制作视频播放器

    最近研究了Python的两个GUI包,Tkinter和PyQT.这两个GUI包的底层分别是Tcl/Tk和QT.相比之下,我觉得PyQT使用起来更加方便,功能也相对丰富.这一篇用PyQT实现一个视频播放 ...

  5. 本机配置集群主机名访问(Windows配置hosts)

    Windows配置hosts C:\Windows\System32\drivers\etc\hosts 主机IP 主机名 示例: 192.168.1.1 master 192.168.1.2 sla ...

  6. Java基础 -3.2

    逻辑运算符 三目(赋值)运算符 合理地利用三目运算可以避免一些大范围的程序编写 三目运算是一种所谓的赋值运算的处理 它是需要设置一个逻辑关系的判断之后才可以进行的赋值操作 基本语法: 关系运算?关系满 ...

  7. VS Code 入门

    将VSCode设置成中文语言环境 快捷键[Ctrl+Shift+P]—输入[Configure Display Language]—将“en”改为“zh-CN”—打开extention输入[Chine ...

  8. 【PAT甲级】1023 Have Fun with Numbers (20 分)

    题意: 输入一个不超过20位的正整数,问乘2以后是否和之前的数组排列相同(数字种类和出现的个数不变),输出Yes或No,并输出乘2后的数字. AAAAAccepted code: #define HA ...

  9. [经验] Java 服务端 和 C# 客户端 实现 Socket 通信

    由于项目需要, 我需要通过 Java 开发的服务端对 C# 作为脚本语言开发的 unity 项目实现控制 话不多说, 直接上代码 首先, 我们先来构建服务端的代码, 服务端我们使用 Java 语言 i ...

  10. IDEA中找不到spring的配置文件,或者不存在某个目录(比如没有src 目录)

    比如 项目中src目录找不到了,解决方式为: 这类问题都是设置这儿.