Python面试高频考点:斐波那契、闭包、反射与并发机制详解

小林子
小林子
发布时间:2026-10-13 | 5人浏览过
原创

本文深入解析Python面试中的经典算法与机制问题,涵盖斐波那契生成器实现、嵌套列表递归展开、可变默认参数陷阱、O(n)复杂度去重算法、闭包变量捕获错误及修正、以及__getattr__反射机制。同时简述Python 2与3差异、垃圾回收、多线程局限及epoll模型,帮助开发者全面掌握核心考点。

本文主要整理并解析了近期Python面试中出现的几道典型题目,旨在为求职者提供参考与学习思路。以下将逐一展开详细讲解:

一、生成斐波那契数列并提取前10项

def func(m):
 n,a,b = 0,1,1
 while n < m:
 yield a
 a,b = b,a+b
 n += 1
for one in func(10):
 print one

这是一道基础且常见的算法题,核心在于理解表达式 a,b=b,a+b 的并行赋值逻辑,以及 yield 关键字在生成器中的作用。

二、递归展开包含子列表的列表

def myextend(alist):
 tmp = []
 for one in alist:
  if isinstance(one,list):
   tmp.extend(myextend(one))
  else:
   tmp.append(one)
 return tmp
t = [1,2,5,[3,[],5,2,[57]],90]
print t
print myextend(t)

此题主要考察对递归调用思想的应用,处理嵌套结构时需正确设计终止条件与递归步骤。

三、分析给定代码的输出结果

def test(x,l=[]):
 for o in range(x):
  l.append(o)
 print l
test(3)
test(1,[3,2,1])
test(3)

预期输入输出如下:

[0,1,2]
[3,2,1,0]
[0,1,2,0,1,2]

当可变类型作为默认参数且未显式传递时,所有函数调用共享该参数对象;若显式传递了新参数(如示例中的第二种情况),则互不影响。

四、在保持元素首次出现顺序的前提下,对含重复数据的列表进行去重,要求时间复杂度为O(n)。

def fun(alist):
 result = []
 temp = set()
 for o in alist:
  if o not in temp:
   result.append(o)
   temp.add(o)
 return result

此题重点考察对列表和集合操作复杂度的理解与组合使用。

五、已知如下函数定义,请写出其输出结果,并给出正确写法:

z = [lambda x:x*i for i in range(3)]
x = [o(2) for o in z]
print x

实际输出结果为 [4,4,4]

此处主要考察Python中闭包的特性及返回函数时的变量绑定问题。由于lambda函数捕获的是变量i的引用而非值,当调用时i已变为2,因此所有lambda计算结果均为4。

修正方案如下:

def func():
 def m(x):
  def n(y):
   return x * y
  return n
 return [f(one) for one in range(3)]
z = func()
x = [o(2) for o in z]
print x

修正后输出结果为 [0,2,4]

六、设计一个类,实现属性访问控制:若属性存在则返回其值,若不存在则返回属性名的字符串形式。

class Mycls(object):
 a = 0
 def __getattr__(self,name):
  print name
z = Mycls()
print z.a,z.b

预期输出为 0 和 b。

此题主要考察Python的反射机制,特别是类中 __getattr__ 方法的使用。

需注意 __getattr__ 与 __getattribute__ 的区别:前者仅在属性查找失败时调用,可返回默认值或引发异常;后者在每次属性访问时都会被调用。

此外,建议参考 getattr() 和 hasattr() 等内置函数的用法。

简答题部分

  • 简述Python 2与Python 3的主要区别
  • 解释Python的垃圾回收机制
  • 说明Python中多线程的实现方法、局限性,以及其他的并发处理方案
  • 简述epoll、select、poll三种I/O多路复用模型的区别

总结

以上就是本文的全部内容,希望这些解析对大家的学习或工作有所帮助。如有疑问,欢迎留言交流,感谢支持。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表