当前位置: 首页 > 科技观察

Python面试中的10个常见问题

时间:2023-03-11 23:47:24 科技观察

概述Python是一种非常流行的编程语言。近年来随着机器学习、云计算等技术的发展,对Python职位的要求越来越高。下面我整理了10个Python面试官常问的问题,供大家参考学习。1.类继承有如下一段代码:()A类的show方法没有了。方法如下:obj.__class__=Aobj.show()__class__方法指向类对象,你只需要给它赋值类型A,然后调用方法show,但是记得修改的时候用光。2.方法对象问题:需要添加什么代码才能让下面的代码运行起来?classA(object):def__init__(self,a,b):self.__a=aself.__b=bdefmyprint(self):print'a=',self.__a,'b=',self.__ba1=A(10,20)a1.myprint()a1(80)答:为了让对象实例可以直接调用,需要实现__call__方法classA(object):def__init__(self,a,b):self.__a=aself.__b=bdefmyprint(self):print'a=',self.__a,'b=',self.__bdef__call__(self,num):print'call:',num+self.__a3,newandinit的以下代码输出什么?classB(对象):deffn(self):print'Bfn'def__init__(self):print"BINIT"classA(object):deffn(self):print'Afn'def__new__(cls,a):print"NEW",aifa>10:returnsuper(A,cls).__new__(cls)returnB()def__init__(self,a):print"INIT",aa1=A(5)a1.fn()a2=A(20)a2.fn()答:NEW5BINITBfnNEW20INIT20Afn使用__new__方法,可以决定返回哪个对象,即在创建对象之前,这个可以用在设计模式的单例和工厂模式中。__init__被调用来创建一个对象。4.Pythonlist和dict生成以下代码的输出是什么?ls=[1,2,3,4]list1=[iforiinlsifi>2]printlist1list2=[i*2foriinlsifi>2]printlist2dic1={x:x**2forxin(2,4,6)}printdic1dic2={x:'item'+str(x**2)forxin(2,4,6)}printdic2set1={xforxin'helloworld'ifxnotin'lowlevel'}printset1答案:[3,4][6,8]{2:4,4:16,6:36}{2:'item4',4:'item16',6:'item36'}set(['h','r','d'])5.全局变量和局部变量以下代码输出?num=9deff1():num=20deff2():printnumf2()f1()f2()答案:99num不是全局变量,所以每个函数都有自己的num副本。如果要修改num,必须用global关键字声明。比如num=9deff1():globalnumnum=20deff2():printnumf2()f1()f2()#prints:#9#206,一行代码交换两个变量的值,交换值两个变量的a=8b=9答案:(a,b)=(b,a)7.默认方法如下classA(object):def__init__(self,a,b):self.a1=aself。b1=bprint'init'defmydefault(self):print'default'a1=A(10,20)a1.fn1()a1.fn2()a1.fn3()方法fn1/fn2/fn3没有定义,添加代码中,未定义的方法会调用mydefault函数,上面的代码应该输出defaultdefaultdefaultanswer:classA(object):def__init__(self,a,b):self.a1=aself.b1=bprint'init'defmydefault(self):print'default'def__getattr__(self,name):returnsself.mydefaulta1=A(10,20)a1.fn1()a1.fn2()a1.fn3()方法__getattr__只有在没有定义的方法被调用时才会被调用.fn1方法传入参数时,我们可以在mydefault方法中加入一个*args可变参数,以实现兼容。classA(object):def__init__(self,a,b):self.a1=aself.b1=bprint'init'defmydefault(self,*args):print'default:'+str(args[0])def__getattr__(self,name):print"otherfn:",namereturnsself.mydefaulta1=A(10,20)a1.fn1(33)a1.fn2('你好')a1.fn3(10)8.包管理一个包里有mod1.py,mod2.py,mod3.py三个模块,但是使用fromdempackimport*导入模块时,如何保证只导入mod1和mod3。答:添加__init__.py文件,在文件中添加:__all__=['mod1','mod3']9.在闭包中写一个函数,接收整数参数n,返回一个函数。函数的作用是将函数转换为参数乘以n并返回结果。答案:defmulby(num):defgn(val):returnnum*valreturngnzw=mulby(7)print(zw(9));10.性能分析defstrtest1(num):str='first'foriinrange(num):str+="X"returnstr下面的代码在哪里答:Python的str是一个不可变对象,每次迭代都会生成一个新的str对象来存储newstring,num越大,创建的str对象越多,内存消耗越大big。