Dix questions courantes d'entretien Python

零到壹度
Libérer: 2020-09-03 15:30:23
original
5363 Les gens l'ont consulté

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()
Copier après la connexion

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

La méthode est la suivante :

obj.__class__ = Aobj.show()
Copier après la connexion

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)
Copier après la connexion

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
Copier après la connexion

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()
Copier après la connexion

Réponse :

NEW 5 B INIT B fn NEW 20 INIT 20 A fn
Copier après la connexion

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
Copier après la connexion

Réponse :

[3, 4]   [6, 8] {2: 4, 4: 16, 6: 36} {2: 'item4', 4: 'item16', 6: 'item36'} set(['h', 'r', 'd'])
Copier après la connexion

5. Variables globales et locales

下面这段代码输出什么?

num = 9   def f1():  num = 20  def f2():  print num  f2()  f1()  f2()
Copier après la connexion

答案:

9  9
Copier après la connexion

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

num = 9  def f1():      global num      num = 20  def f2():     print num  f2()  f1()  f2()  # prints:  #      9  #      20
Copier après la connexion

6、交换两个变量的值

一行代码交换两个变量值

a=8  b=9
Copier après la connexion

答案:

(a,b) = (b,a)
Copier après la connexion

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()
Copier après la connexion

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

defaultdefaultdefault
Copier après la connexion

答案:

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()
Copier après la connexion

方法__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)
Copier après la connexion

8、包管理

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

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

__all__ = ['mod1','mod3']
Copier après la connexion

9、闭包

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

答案:

def mulby(num):  def gn(val):  return num * val  return gn  zw = mulby(7)  print(zw(9));
Copier après la connexion

10、性能

解析下面的代码慢在哪

def strtest1(num):  str='first'  for i in range(num):  str+="X"  return str
Copier après la connexion

答案: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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal