今天扣丁学堂给大家整理了一下关于日常面试中Python开发工程师常见面试题及答案,下面我们一起来看一下吧。
生成斐波那契数列并取前10项
deffunc(m):
n,a,b=0,1,1
whilen<m:
yielda
a,b=b,a+b
n+=1
foroneinfunc(10):
printone
这个可以说是一道常见的简单算法题了,关键点就是理解a,b=b,a+b以及yield的作用。
扩展一个列表,列表中的元素可能也包含列表
defmyextend(alist):
tmp=[]
foroneinalist:
ifisinstance(one,list):
tmp.extend(myextend(one))
else:
tmp.append(one)
returntmp
t=[1,2,5,[3,[],5,2,[57]],90]
printt
printmyextend(t)
考察递归调用的思想。
有如下代码,请写出输出
deftest(x,l=[]):
foroinrange(x):
l.append(o)
printl
test(3)
test(1,[3,2,1])
test(3)
输出如下:
[0,1,2]
[3,2,1,0]
[0,1,2,0,1,2]
可变类型作为参数在不显示传递参数时,每次函数调用时候都是共用的;如果传递了参数(比如第二种)则不会互相影响。
已知某列表中包含重复数据,保持列表中元素第一次出现的顺序并去重,要求复杂度为O(n)。
deffun(alist):
result=[]
temp=set()
foroinalist:
ifonotintemp:
result.append(o)
temp.add(o)
returnresult
考察列表、集合等常见操作的复杂度。
已知如下函数,请写出输出,并写出正确写法:
z=[lambdax:x*iforiinrange(3)]
x=[o(2)foroinz]
printx
输出为
[4,4,4]
这里主要考察python中闭包、返回值为函数时候的知识点。由于lambda函数共用了i变量,当调用时候i已经变成了2,所以输出都是4。
改正:
deffunc():
defm(x):
defn(y):
returnx*y
returnn
return[f(one)foroneinrange(3)]
z=func()
x=[o(2)foroinz]
printx
输出
[0,2,4]
创建一个类,并输出某个属性。如果这个属性存在则输出值,否则输出这个属性名的字符串
classMycls(object):
a=0
def__getattr__(self,name):
printname
z=Mycls()
printz.a,z.b
输出为
0,b
主要考察python的反射机制,以及类相关的__getattr__方法。
注意:__getattr__方法和__getattribute__方法的区别,前者只有在属性不存在时候调用,返回一个值或者引发异常。而后者是每次都会被调用的。另外可以看看getattr(),hasattr()这种内置函数。