十二道常见的Python面试题

简介: 文章目录 1.这两个参数是什么意思:\*args,\**kwargs?我们为什么要使用它们? 2.谈一谈Python的装饰器(decorator) 3.简要描述Python的垃圾回收机制(garbage collection) 4.Python多线程(mlti-threading)。这是个好主意吗? 5.说明os.sys模块不同,并列举常用的模块方法? 6.什么是lmbda表达式?它有什么好处?


文章目录

               1.这两个参数是什么意思:\*args,\**kwargs?我们为什么要使用它们?

               2.谈一谈Python的装饰器(decorator)

               3.简要描述Python的垃圾回收机制(garbage collection)

               4.Python多线程(mlti-threading)。这是个好主意吗?

               5.说明os.sys模块不同,并列举常用的模块方法?

               6.什么是lmbda表达式?它有什么好处?

               7.Python中pass语句的作用是什么?

               8.Python是如何进行类型转换的?

               9.Python里面如何拷贝一个对象?

               10.__new__和__init__的区别

               11.Python中单下划线和双下划线分别是什么?

               12.说一说Python自省

1.这两个参数是什么意思:*args,**kwargs?我们为什么要使用它们?

答:当函数的参数的参数前面有一个星号的时候表示这是一个可变的位置参数,两个星号**的时候表示这是一个可变的关键词参数,一个星号把序列或者集合解包(unpack)成位置参数,两个星号**把字典解包成关键词参数。

image.png

2.谈一谈Python的装饰器(decorator)

装饰器本质上是一个Python函数,它可以让其它函数不变动的情况下增加新的功能,装饰器的返回值也是以一个函数。它经常用于有切面需求的场景。比如:插入日志,性能测试,缓存,事务处理,权限校验等。有了装饰器我们就可以抽出大量与函数无关的雷同代码进行重用。

image.png3.简要描述Python的垃圾回收机制(garbage collection)

Python中的垃圾回收是以引用计数为主,标记-清除和分代收集为辅。

   引用计数:Python在内存中存储每个对象的引用计数,如果计数变成0,该对象就会消失,分配给该对象的内存就会释放出来。

   标记-清除:一些容器对象,比如list、dict、tuple,instance等可能会出现引用循环,对于这些循环,垃圾回收器会定时回收这些循环(对象之间通过引用(指针)连在一起,构成一个有向图,对象构成这个有向图的节点,而引用关系构成这个有向图的边)。

   分代收集:Python把内存根据对象存活时间划分为三代,对象创建之后,垃圾回收器会分配它们所属的代。每个对象都会被分配一个代,而被分配更年轻的代是被优先处理的,因此越晚创建的对象越容易被回收。

4.Python多线程(mlti-threading)。这是个好主意吗?

Python并不支持真正意义上的多线程,Python提供了多线程包。Python中有一个叫Global Interpreter Lock(GIL)的东西,它能确保你的代码中永远只有一个线程在执行。经过GIL的处理,会增加执行的开销。这就意味着如果你先要提高代码执行效率,使用threading不是一个明智的选择,当然如果你的代码是IO密集型,多线程可以明显提高效率,相反如果你的代码是CPU密集型的这种情况下多线程大部分是鸡肋。

5.说明os.sys模块不同,并列举常用的模块方法?

官方文档:

   os模板提供了一种方便的使用操作系统函数的方法

   sys模板可供访问由解释器使用或维护的变量和与解释器交互的函数

另一种回答:

os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口。sys模块负责程序与Python解释器的交互,提供了一系列的函数和变量用户操作Python运行时的环境。一些常用的方法:

image.png

image.png

image.png

6.什么是lmbda表达式?它有什么好处?

简单来说,lambda表达式通常是当你需要使用一个函数,但是又不想费脑袋去命名一个函数的时候使用,也就是通常所说的匿名函数。

lambda表达式一般的形式是:关键词lambda后面紧接一个或多个参数,紧接一个冒号“:”,紧接一个表达式。lambda表达式是一个表达式不是一个语句。

image.png

7.Python中pass语句的作用是什么?

pass语句不会执行任何操作,一般作为占位符或者创建占位程序

8.Python是如何进行类型转换的?

Python提供了将变量或值从一种类型转换为另一种类型的内置方法。

image.png

9.Python里面如何拷贝一个对象?

Python中对象之间的赋值是按引用传递的,如果要拷贝对象需要使用标准模板中的copy

copy.copy:浅拷贝,只拷贝父对象,不拷贝父对象的子对象。

copy.deepcopy:深拷贝,拷贝父对象和子对象。

image.png

10.__new__和__init__的区别

__init__为初始化方法,__new__方法是真正的构造函数。

__new__是实例创建之前被调用,它的任务是创建并返回该实例,是静态方法

__init__是实例创建之后被调用的,然后设置对象属性的一些初始值。

总结:__new__方法在__init__方法之前被调用,并且__new__方法的返回值将传递给__init__方法作为第一个参数,最后__init__给这个实例设置一些参数。

image.png

11.Python中单下划线和双下划线分别是什么?

name:一种约定,Python内部的名字,用来与用户自定义的名字区分开,防止冲突

_name:一种约定,用来指定变量私有

__name:解释器用_classname__name来代替这个名字用以区别和其他类相同的命名

想要更加详细的了解这两者的区别

12.说一说Python自省

自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型。简单一句话就是运行时能够获得对象的类型。比如:type()、dir()、getattr()、hasattr()、isinstance()

image.png


相关文章
|
3月前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
3月前
|
Java C++ Python
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
|
3月前
|
设计模式 Unix Python
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
|
6月前
|
数据采集 机器学习/深度学习 数据可视化
了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。
【7月更文挑战第5天】了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。数据预处理涉及缺失值(dropna(), fillna())和异常值处理。使用describe()进行统计分析,通过Matplotlib和Seaborn绘图。回归和分类分析用到Scikit-learn,如LinearRegression和RandomForestClassifier。
119 3
|
6月前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
6月前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
6月前
|
算法 Java Linux
python中的面试常考知识点
python中的面试常考知识点
|
8月前
|
存储 数据可视化 算法
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
|
8月前
|
数据采集 Java 数据挖掘
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
|
8月前
|
数据采集 算法 网络协议
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题