Python开发工程师常见的面试题及答案分享,记得收藏哈!

 

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

deffunc(m):

n,a,b=0,1,1

whilen

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])

输出如下:

[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()

输出

[0,2,4]

创建一个类,并输出某个属性。如果这个属性存在则输出值,否则输出这个属性名的字符串

classMycls(object):

a=0

def__getattr__(self,name):

printname

z=Mycls()

printz.a,z.b

0,b

主要考察python的反射机制,以及类相关的__getattr__方法。如果大家对Python感兴趣的话,可以加一下我的微信哦:abb436574,免费领取一套学习资料和视频课程哟~

注意:__getattr__方法和__getattribute__方法的区别,前者只有在属性不存在时候调用,返回一个值或者引发异常。而后者是每次都会被调用的。另外可以看看getattr(),hasattr()这种内置函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值