分享几道你可能遇到的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,[],[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,1]) test(3) 输入如下: [0,2] [3,0] [0,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,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__方法的区别,前者只有在属性不存在时候调用,返回一个值或者引发异常。而后者是每次都会被调用的。 另外可以看看 简答题
总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |