Maison  >  Article  >  développement back-end  >  Dix questions courantes d'entretien Python

Dix questions courantes d'entretien Python

零到壹度
零到壹度original
2018-04-02 10:59:215362parcourir

Dix questions courantes d'entretien Python

Python est un langage de programmation très populaire Avec le développement de l'apprentissage automatique, du cloud computing et d'autres technologies ces dernières années, la demande d'emplois Python. est devenu de plus en plus important. Vous trouverez ci-dessous une collection de 10 questions fréquemment posées par les intervieweurs Python pour votre référence.

Articles connexes recommandés  : " Résumé des questions d'entretien Python en 2020 (dernier) "

1. L'héritage de classe

a le code suivant :

class A(object):  def show(self):  print 'base show'   class B(A):  def show(self):  print 'derived show'  obj = B()  obj.show()

Comment appeler la méthode show de la classe A.

La méthode est la suivante :

obj.__class__ = Aobj.show()

La méthode __class__ pointe vers l'objet de classe, attribuez-lui simplement le type A, puis appelez la méthode show , mais n'oubliez pas de la modifier après utilisation.

2. Objet méthode

Question : Quel code doit être ajouté pour exécuter le code suivant ?

class A(object): def __init__(self,a,b): self.__a = a self.__b = b def myprint(self): print 'a=', self.__a, 'b=', self.__b a1=A(10,20) a1.myprint() a1(80)

Réponse : Afin de permettre à l'instance d'objet d'être appelée directement, la méthode __call__ doit être implémentée

class A(object): def __init__(self, a, b): self.__a = a self.__b = b def myprint(self): print 'a=', self.__a, 'b=', self.__b def __call__(self, num): print 'call:', num + self.__a

3. new et init

Que produit le code suivant ?

class B(object):  def fn(self):  print 'B fn'  def __init__(self):  print "B INIT"  class A(object):  def fn(self):  print 'A fn'  def __new__(cls,a):  print "NEW", a  if a>10:  return super(A, cls).__new__(cls)  return B()  def __init__(self,a):  print "INIT", a  a1 = A(5)  a1.fn()  a2=A(20)  a2.fn()

Réponse :

NEW 5 B INIT B fn NEW 20 INIT 20 A fn

En utilisant la méthode __new__, vous pouvez décider quel objet renvoyer, c'est-à-dire avant de créer l'objet, cela peut être utilisé dans les modèles de conception singleton et d'usine. __init__ est appelé lors de la création d'un objet.

4. Liste Python et génération de dict

Que produit le code suivant ?

ls = [1,2,3,4]  list1 = [i for i in ls if i>2]  print list1  list2 = [i*2 for i in ls if i>2]  print list2  dic1 = {x: x**2 for x in (2, 4, 6)}  print dic1  dic2 = {x: 'item' + str(x**2) for x in (2, 4, 6)}  print dic2  set1 = {x for x in 'hello world' if x not in 'low level'}  print set1

Réponse :

[3, 4]   [6, 8] {2: 4, 4: 16, 6: 36} {2: 'item4', 4: 'item16', 6: 'item36'} set(['h', 'r', 'd'])

5. Variables globales et locales

下面这段代码输出什么?

num = 9   def f1():  num = 20  def f2():  print num  f2()  f1()  f2()

答案:

9  9

num不是个全局变量,所以每个函数都得到了自己的num拷贝,如果你想修改num,则必须用global关键字声明。比如下面这样

num = 9  def f1():      global num      num = 20  def f2():     print num  f2()  f1()  f2()  # prints:  #      9  #      20

6、交换两个变量的值

一行代码交换两个变量值

a=8  b=9

答案:

(a,b) = (b,a)

7、默认方法

如下的代码

class A(object):  def __init__(self,a,b):  self.a1 = a  self.b1 = b  print 'init'  def mydefault(self):  print 'default'  a1 = A(10,20)  a1.fn1()  a1.fn2()  a1.fn3()

方法 fn1/fn2/fn3 都没有定义,添加代码,是没有定义的方法都调用mydefault函数,上面的代码应该输出

defaultdefaultdefault

答案:

class A(object): def __init__(self,a,b):  self.a1 = a  self.b1 = b  print 'init'  def mydefault(self):  print 'default'  def __getattr__(self,name):  return self.mydefault  a1 = A(10,20)  a1.fn1()  a1.fn2()  a1.fn3()

方法__getattr__只有当没有定义的方法调用时,才是调用他。当fn1方法传入参数时,我们可以给mydefault方法增加一个*args不定参数来兼容。

class A(object):  def __init__(self,a,b):  self.a1 = a  self.b1 = b  print 'init'  def mydefault(self,*args):  print 'default:' + str(args[0])  def __getattr__(self,name):  print "other fn:",name  return self.mydefault a1 = A(10,20)  a1.fn1(33)  a1.fn2('hello')  a1.fn3(10)

8、包管理

一个包里有三个模块,mod1.py, mod2.py, mod3.py,但使用from demopack import *导入模块时,如何保证只有mod1、mod3被导入了。

答案:增加__init__.py文件,并在文件中增加:

__all__ = ['mod1','mod3']

9、闭包

写一个函数,接收整数参数n,返回一个函数,函数的功能是把函数的参数和n相乘并把结果返回。

答案:

def mulby(num):  def gn(val):  return num * val  return gn  zw = mulby(7)  print(zw(9));

10、性能

解析下面的代码慢在哪

def strtest1(num):  str='first'  for i in range(num):  str+="X"  return str

答案:python的str是个不可变对象,每次迭代,都会生成新的str对象来存储新的字符串,num越大,创建的str对象越多,内存消耗越大。

相关学习推荐:python视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn