Python 面试题
1. 基础概念1.概念定义1. 装饰器是什么装饰器本质接受函数为参数返回一个新函数。可以在不修改原函数源码、不改变函数调用方式的情况下动态给函数新增额外功能。2. Python GIL 是什么GIL Global Interpreter Lock全局解释器锁是 CPython 解释器独有的一把互斥锁。核心规则同一时刻一个 Python 进程内只能有一个线程执行字节码。对于计算密集型程序要用多进程才能充分利用多核CPU. multiprocessing对于I/O密集型可以用多线程。3. Python 协程库asynciogeventtrio/anyio2.概念对比1. 列表和元组有什么区别元组适用于什么情况list 可变tuple不可变。元组适用于数据长久固定不需要修改的场景。元组可以作为字典的key, 列表无法充当Key(不可变才可哈希)2. is 和 的区别是什么“”比较数值is比较地址。3.生成器和迭代器有什么区别生成器函数含 yield 关键字每次调用返回新生成器对象天然支持多次遍历不要在类里直接写 yield应定义生成器方法再在__iter__中调用。迭代器必须实现两个方法__iter__() 和 __next__()4. *args 和**kwargs 是什么?*args 收集非关键字参数为元组允许传递任意数量的位置参数**kwargs 收集关键字参数为字典允许传递任意数量的键值对参数3. 语法知识1. Python如何调Shell?os.system() 仅执行命令无法获取输出os.popen() 可以接收命令返回结果os.subprocess().run() 支持获取标准输出标准错误管道交互。2. Python 在异常处理中else 和 finally 的作用分别是什么?else当try代码块没有抛出任何异常时才会执行else中的代码若出现异常则跳过。finally无论try块是否发生异常、是否执行return/break最终一定会执行常用于释放资源文件、网络连接等。4. 内存管理1. 深拷贝和浅拷贝有什么区别浅拷贝仅复制对象本身嵌套对象仍为引用修改拷贝后的嵌套对象会影响原对象用 copy.copy() 实现深拷贝复制对象及其所有嵌套对象修改拷贝后不影响原对象用 copy.deepcopy() 实现。2. Python 的垃圾回收机制引用计数分代回收标记-清除。4. 字符串相关1. 字符串是不可变的。2. python字符串怎么反转s[::-1].join(reverse(s))5. 面向对象1. python怎么调父类的方法?super().func()2. python的类方法, 实例方法和静态方法实例方法只能实例对象调用。类方法静态方法类和实例对象都能调用。6. 其他1. 有没有用过 pytest 框架pytest是Python主流的单元测试框架。