• Python经典面试题


    Python现在已经成为最热门的编程语言之一,不论从普及度和生态规模都已位居编程语言第一,而且相关职位也越来越多,无论数据岗、测试岗亦或开发岗都对Python技能有着高度的需求。

     

    把之前总结的Python面试题分享给大家,希望能够帮助你在求职面试中脱颖而出,找到一份高薪工作。这些面试题涉及Python基础知识、Python编程、数据分析以及Python函数库等多个方面。

    目录

    一、基础部分

    二、编程题


    114道经典面试题~关注下方公众号领取全部面试资料!!!

    一、基础部分

    1、简述解释型和编译型编程语言

    概念:编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。

    解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!

    区别:编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。如C、C++、Delphi、Pascal,Fortran。解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好。如Java、Basic.

    2、Python解释器种类以及特点。

    CPython:c语言开发的 使用最广的解释器

    IPython:基于cpython之上的一个交互式计时器 交互方式增强 功能和cpython一样

    PyPy:目标是执行效率 采用JIT技术 对python代码进行动态编译,提高执行效率

    JPython:运行在Java上的解释器 直接把python代码编译成Java字节码执行

    IronPython:运行在微软 .NET 平台上的解释器,把python编译成. NET 的字节码

    3、Python是如何解释语言的

    Python在运行之前不需要对程序进行解释。因此,Python是一种解释型语言。

    4、Python是通用编程语言吗

    Python能够编写脚本,但从一般意义上讲,它被认为是一种通用编程语言。

    5、Python的主要功能是什么

    Python是一种解释型语言。与C语言等语言不同,Python不需要在运行之前进行编译。Python是动态语言,当您声明变量或类似变量时,您不需要声明变量的类型。Python适合面向对象的编程,因为它允许类的定义以及组合和继承。Python没有访问说明(如C ++的public,private)。

    在Python中,函数是第一类对象。它们可以分配给变量。类也是第一类对象编写Python代码很快,但运行比较慢。Python允许基于C的扩展,例如numpy函数库。Python可用于许多领域。Web应用程序开发,自动化,数学建模,大数据应用程序等等。它也经常被用作“胶水”代码。

    6、什么是pep

    PEP代表Python Enhancement Proposal。它是一组规则,指定如何格式化Python代码以获得最大可读性。

    7、简述多线程、多进程

    进程:

    1、操作系统进行资源分配和调度的基本单位,多个进程之间相互独立。

    2、稳定性好,如果一个进程崩溃,不影响其他进程,但是进程消耗资源大,开启的进程数量有限制。

    线程:

    1、CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,一个进程下的多个线程可以共享该进程的所有资源。

    2、如果IO操作密集,则可以多线程运行效率高,缺点是如果一个线程崩溃,都会造成进程的崩溃。

    应用:

    IO密集的用多线程,在用户输入,sleep 时候,可以切换到其他线程执行,减少等待的时间。

    CPU密集的用多进程,因为假如IO操作少,用多线程的话,因为线程共享一个全局解释器锁,当前运行的线程会霸占GIL,其他线程没有GIL,就不能充分利用多核CPU的优势。

    二、编程题

    1、一行代码实现1~100之和

    利用sum()函数求和。

    print(sum(range(1, 101))) #5050

    2、如何在一个函数内部修改全局变量

    利用global在函数声明 修改全局变量。

    1. a = 5
    2. def fn():
    3. global a
    4. a = 4
    5. fn()
    6. print(a) #4

    3、字典如何删除键和合并两个字典

    del和update方法.

    1. dic = {"name": "xiaowang", "age": 18}
    2. del dic["name"]
    3. print(dic) #{'age': 18}
    4. dic2 = {"name":"xiaozhao"}
    5. dic.update(dic2)
    6. print(dic) # {'age': 18, 'name': 'xiaozhao'}

    4、python实现列表去重的方法

    先通过集合去重,在转列表。

    1. lis = [11, 12, 13, 12, 15, 16, 13]
    2. a = set(lis)
    3. print(a) #{11, 12, 13, 15, 16}

    5、fun(*args,**kwargs)中的*args,**kwargs什么意思

    当不定数量的参数传递给一个函数时可以使用*args与**kwargs,

    *args是用来发送一个键值对可变数量的参数列表给一个函数,意思就是没有key值。

    1. def gallo(farg, *args):
    2. print("farg:", farg)
    3. for x in args:
    4. print("arg:", x)
    5. gallo(1, 2, 3, 4)
    6. # farg: 1
    7. # arg: 2
    8. # arg: 3
    9. # arg: 4

    **kwargs将不定长度的键值对,作为参数传递给一个函数。意思就是有key值。

    1. def gallo(arg, **kwargs):
    2. print("arg:", arg)
    3. for key in kwargs:
    4. print("%s: %s" % (key, kwargs[key]))
    5. gallo(arg=1, arg2=2, arg3=3)
    6. # arg: 1
    7. # arg2: 2
    8. # arg3: 3

    6、简述面向对象中__new__和__init__区别

    __init__是初始化方法,创建对象后,就立刻被默认调用了,可接收参数,如下,

    1. class Bike:
    2. def __init__(self, newWheelNum, newColor):
    3. self.wheelNum = newWheelNum
    4.         self.color = newColor
    5. def move(self):
    6.         print("车会跑")
    7. # 创建对象
    8. bike = Bike(2, "green")
    9. print("车的颜色为:%s" % bike.color) #车的颜色为:green
    10. print("车轮子数量为:%s" % bike.wheelNum #车轮子数量为:2

    1) __new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别

    2) __new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例

    3) __init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值

    4) 如果__new__创建的是当前类的实例,会自动调用__init__函数,通过return语句里面调用的__new__函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__函数,也不会调用其他类的__init__函数。

    1. class A(object):
    2. def __init__(self):
    3.         print("这是 init 方法", self)
    4. def __new__(cls):
    5. print("这是 cls 的ID", id(cls))
    6. print("这是 new 方法", object.__new__(cls))
    7.         return object.__new__(cls)
    8. A()
    9. print("这是类A的ID", id(A))
    10. # 这是 cls 的ID 2529692472672
    11. # 这是 new 方法 <__main__.A object at 0x0000024CFD7CEF10>
    12. # 这是 init 方法 <__main__.A object at 0x0000024CFD7CEF10>
    13. # 这是类A的ID 2529692472672

    7、简述with方法打开处理文件帮我我们做了什么

    1. f = open("./1.txt""wb")
    2. try:
    3. f.write("hello world")
    4. except:
    5. pass
    6. finally:
    7.     f.close()

    打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open

    写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行finally f.close()关闭文件,with方法帮我们实现了finally中f.close。

    1. with open(file='1.txt', mode='r')as f:
    2. print(f.read())

    更多面试内容请关注下方公众号获取!

  • 相关阅读:
    Java8-接口的新增(默认方法和静态方法)
    唐老师讲电赛
    洞悉微服务构建流程,以实战角度出发,详解微服务架构
    Python爬虫网易云音乐,Tkinter制作音乐播放器
    Excel·VBA制作工资条
    设计模式——装饰器模式(Decorator Pattern)+ Spring相关源码
    JVM监控工具jstat使用介绍
    客观评价一下GPT-4o
    前端随笔0:URL与状态的双向绑定
    面经:中国人民银行金融科技研究院
  • 原文地址:https://blog.csdn.net/wangyongfei5000/article/details/125835228