分享几道你可能遇到的python面试题

yipeiwu_com5年前Python基础

本文主要给大家介绍的是关于最近在面试中遇到的几个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,所以输出都是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()这种内置函数。

简答题

  • 简述py2和py3的区别
  • python的垃圾回收机制
  • python中多线程的方法,局限,以及有什么其他方式进行并发处理
  • 简述epoll、select、poll三种模型

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对【听图阁-专注于Python设计】的支持。

相关文章

Python pandas RFM模型应用实例详解

Python pandas RFM模型应用实例详解

本文实例讲述了Python pandas RFM模型应用。分享给大家供大家参考,具体如下: 什么是RFM模型 根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有3个...

对命令行模式与python交互模式介绍

命令行模式与python交互模式 1.在命令行模式下,可以执行 python 进入 Python 交互式环境,也可以执 行 python hello.py 运行一个.py 文件。 2.在...

Python使用random和tertools模块解一些经典概率问题

random 模块中的常用函数 复制代码 代码如下: random() 返回一个位于区间 [0,1] 内的实数; uniform(a, b) 返回一个位于区间 [a,b] 内的实数; r...

利用Python的装饰器解决Bottle框架中用户验证问题

首先来分析下需求,web程序后台需要认证,后台页面包含多个页面,最普通的方法就是为每个url添加认证,但是这样就需要每个每个绑定url的后台函数都需要添加类似或者相同的代码,但是这样做代...

详解Python实现进度条的4种方式

详解Python实现进度条的4种方式

这里只列举了部分方法,其他方法或python库暂时还没使用到 1.不用库,直接打印: 代码样例: import time #demo1 def process_bar(percent...