必读文章:

常见面试题整理—Python概念篇

面试题

  1. python 常见的聚合函数有哪些?
    聚合函数就是把一堆数按照某种规则聚合成一个值的函数, sum() 是求和函数, max() 取最大值, min() 取最小值。 reduce() 也是聚合函数,可以自定义聚合的规则,如:叠乘,叠加等。
    2. 如何在一个函数内部修改全局变量?
    使用 global 在函数中声明,修改全局变量
    例子:

  2. 没有使用 global

此时 MAX_LEN 是函数内的局部变量,只在函数内起作用,函数调用完毕会被销毁。
Screen Shot 2021-02-16 at 16.58.37.png

  1. 使用了 global

使用了 global 此时函数内的 MAX_LEN 和函数外的是同一个变量
Screen Shot 2021-02-16 at 16.57.34.png
3. 列出常见的 python 标准库
os:负责程序与操作系统的交互,提供了访问操作系统底层的接口。
sys: 通常用于命令行参数。负责程序与python 解释器的交互,提供了一系列的函数和变量用户操作Python 运行时的环境。
re: 正则匹配
math: 数学运算
datetime:处理日期时间
collections:集合相关的操作,常见的有 defaultdict,Counter 等

  1. 哪些函数体现了 python 的函数式编程特性?
    map, reduce, filter 函数。
    (要自己查资料,了解这三个函数)
    5. python 的深拷贝与浅拷贝的区别?
    浅拷贝是在另一块地址中创建一个新变量或容器,但是容器内的元素的地址是源对象的元素的地址的拷贝。
    深拷贝就是在另一块地址创建一个新的变量或容器,同时容器内的元素的地址也是新开辟的,仅仅是值相同而已,是完全的副本。
    6.xrange 和 range的区别?
  • range() 是 Python 的内置函数,用于创建整数的列表,可以生成递增或递减的数列 range(1,5)
  • xrange 用法与range 完全相同,所不同的是生成的不是一个数组,而是一个生成器。list(xrange(1,5))

7.字典中key和value的限制?
在字典中,键是不可改变的,但值是可以改变的,可以是任意类型。
8.python 自省。
自省就是运行时能够获得对象的类型。比如 type()、dir()、getattr()、hasattr()、isinstance()。
9.python 中单下划线和双下划线分别是什么?

  • name:一种约定,python内部的名字,用来与用户自定义的名字区分开,防止冲突。
  • _name: 一种约定,用来指定变量私有。
  • name:解释器用_classnamename来代替这个名字用以区别和其他类相同的命名。

10.newinit的区别。

  • init为初始化方法,new方法是真正的构造函数。
  • new是实例创建之前被调用,它的任务是创建并返回该实例,是静态方法。
  • init是实例创建之后被调用的,然后设置对象属性的一些初始值。

new方法在init方法之前被调用,并用new方法的返回值将传递给init方法作为第一个参数,最后init给这个实例设置一些参数。
11.python 中pass语句的作用是什么?
pass 不会执行任何操作,一般为占位符或者创建占位程序。
12.lambda表达式的好处?
lambda 是匿名函数,为了计算方便。
13.python 多线程
python不支持真正意义上的多线程,提供了多线程包。python 中有一个全局解释锁Global Interpreter Lock(GIL)的东西,它能确保代码永远只有一个线程在执行。经过GIL的处理,会增加执行的开销。如果代码是IO密集型,多线程可以明显提高效率,如果代码是CPU密集型的这种情况下多线程大部分是鸡肋。
14.python 的垃圾回收机制。
引用计数为主,标记-清除分代收集为辅。

  • 引用计数:Python在内存中存储每个对象的引用计数,如果计数变成0,该对象就会消失,分配给该对象的内存就会释放出来。
  • 标记-清除:一些容器对象,比如list、dict、tuple,instance等可能会出现引用循环,对于这些循环,垃圾回收器会定时回收这些循环(对象之间通过引用(指针)连在一起,构成一个有向图,对象构成这个有向图的节点,而引用关系构成这个有向图的边)。
  • 分代收集:Python把内存根据对象存活时间划分为三代,对象创建之后,垃圾回收器会分配它们所属的代。每个对象都会被分配一个代,而被分配更年轻的代是被优先处理的,因此越晚创建的对象越容易被回收。

15.python 装饰器。
本质上是一个函数,可以让其他函数在不做任何变动的情况下增加额外功能,装饰器的返回值也是一个函数的对象,常用于有切面需求的场景。比如:插入日志、性能测试、事务处理、缓存、权限校验等。有了装饰器可以抽离出大量与函数功能无关的雷同代码进行重用。
16.两个参数是什么意思:args,**kwargs
如果我们不确定往一个函数中传入多少参数,或者我们希望以元组(tuple)或者列表(list)的形式传参数的时候,我们可以使用
args(单星号)。如果我们不知道往函数中传递多少个关键词参数或者想传入字典的值作为关键词参数的时候我们可以使用**kwargs(双星号),args、kwargs两个标识符是约定俗成的用法。
17.python 的 re.findall() \re.match()\re.search()的区别。
正则

  • re.findall() 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
  • re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;
  • re.search匹配整个字符串,直到找到一个匹配。