Maison  >  Article  >  développement back-end  >  (Complet) Résumé des exemples classiques de questions d'entretien Python

(Complet) Résumé des exemples classiques de questions d'entretien Python

不言
不言avant
2019-02-23 10:54:045196parcourir

(Complet) Résumé des exemples classiques de questions d'entretien Python

Le contenu de cet article est un résumé d'exemples classiques de questions d'entretien Python (complètes). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. Vous avez aidé.

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

1. Comment implémenter le mode singleton en Python ?

Python propose deux manières d'implémenter le mode singleton. Les deux exemples suivants utilisent différentes manières d'implémenter le mode singleton :

1,

class Singleton(type):
def __init__(cls, name, bases, dict):
super(Singleton, cls).__init__(name, bases, dict)
cls.instance = None
def __call__(cls, *args, **kw):
if cls.instance is None:
cls.instance = super(Singleton, cls).__call__(*args, **kw)
return cls.instance
class MyClass(object):
__metaclass__ = Singleton
print MyClass()
print MyClass()

Utilisez Decorator pour implémenter le mode singleton

def singleton(cls):
instances = {}
def getinstance():
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return getinstance
@singleton
class MyClass:
…

2 : Qu'est-ce qu'une fonction lambda ?

Python permet de définir une petite fonction sur une ligne. La forme de définition de la fonction lambda est la suivante : Paramètres labmda : expression La fonction lambda renvoie la valeur de l'expression par défaut. Vous pouvez également l'affecter à une variable. La fonction lambda peut accepter n'importe quel nombre de paramètres, y compris les paramètres facultatifs, mais il n'y a qu'une seule expression :

>>> g = lambda x, y: x*y
>>> g(3,4)
12
>>> g = lambda x, y=0, z=0: x+y+z
>>> g(1)
1
>>> g(3, 4, 7)
14

Vous pouvez également utiliser la fonction lambda directement sans l'attribuer à une variable :

>>> (lambda x,y=0,z=0:x+y+z)(3,5,6)
14

Si votre fonction est très simple, avec une seule expression et aucune commande, pensez à une fonction lambda. Sinon, vous feriez mieux de définir une fonction. Après tout, les fonctions n'ont pas autant de restrictions.

3 : Comment Python effectue-t-il la conversion de type ?

Python fournit des fonctions intégrées pour convertir des variables ou des valeurs d'un type à un autre. La fonction int convertit une chaîne numérique au format mathématique en un entier. Sinon, un message d'erreur est renvoyé.

>>> int(”34″)
34
>>> int(”1234ab”) #不能转换成整数
ValueError: invalid literal for int(): 1234ab

La fonction int peut également convertir des nombres à virgule flottante en nombres entiers, mais la partie décimale du nombre à virgule flottante est tronquée.

>>> int(34.1234)
34
>>> int(-2.46)
-2

La fonction °oat convertit les entiers et les chaînes en nombres à virgule flottante :

>>> float(”12″)
12.0
>>> float(”1.111111″)
1.111111

La fonction str convertit les nombres en caractères :

>>> str(98)
‘98′
>>> str(”76.765″)
‘76.765′

Entier 1 et float 1.0 sont différents en python. Bien que leurs valeurs soient égales, elles sont de types différents. Le format de stockage de ces deux numéros dans l’ordinateur est également différent.

4 : Comment définir une fonction en Python

La forme de définition de la fonction est la suivante :

def <name>(arg1, arg2,… argN):
<statements>

Le nom de la La fonction doit également commencer par une lettre, vous pouvez inclure le trait de soulignement « », mais les mots-clés Python ne peuvent pas être définis comme noms de fonction. Le nombre d'instructions dans une fonction est arbitraire et chaque instruction doit être indentée d'au moins un espace pour indiquer qu'elle appartient à cette fonction. Là où se termine l’indentation, la fonction se termine naturellement.
Ce qui suit définit une fonction qui ajoute deux nombres :

>>> def add(p1, p2):
print p1, “+”, p2, “=”, p1+p2
>>> add(1, 2)
1 + 2 = 3

Le but de la fonction est de masquer certaines opérations complexes pour simplifier la structure du programme et le rendre plus facile à lire. Les fonctions doivent être définies avant de pouvoir être appelées. Vous pouvez également définir une fonction à l'intérieur d'une fonction, et la fonction interne ne peut être exécutée que lorsque la fonction externe est appelée. Lorsque le programme appelle une fonction, il va à l'intérieur de la fonction pour exécuter les instructions à l'intérieur de la fonction, une fois la fonction exécutée, il revient à l'endroit où il a quitté le programme et exécute l'instruction suivante du programme.

5 : Comment Python gère-t-il la mémoire ?

La gestion de la mémoire de Python est prise en charge par l'interpréteur Python. Les développeurs peuvent être libérés des problèmes de gestion de la mémoire et se concentrer sur le développement d'applications, ce qui entraîne moins d'erreurs de programme et le développement. le cycle est plus court

6 : Comment itérer une séquence dans l'ordre inverse ?

comment parcourir une séquence dans l'ordre inverse

S'il s'agit d'une liste, la solution la plus rapide est :

list.reverse()
try:
for x in list:
“do something with x”
finally:
list.reverse()

Si ce n'est pas une list, La solution la plus polyvalente mais légèrement plus lente est :

for i in range(len(sequence)-1, -1, -1):
x = sequence[i]
<do something with x>

7 : Comment convertir un tuple et une liste en Python ?

La fonction tuple(seq) peut convertir toutes les séquences itérables (itérables) en un tuple, les éléments et l'ordre restent inchangés.
Par exemple, tuple([1,2,3]) renvoie (1,2,3), tuple('abc') renvoie ('a'.'b','c'). déjà pour les tuples, la fonction renvoie directement l'objet original sans faire de copies, il n'est donc pas très coûteux d'appeler la fonction tuple() lorsque vous n'êtes pas sûr que l'objet soit un tuple.
La fonction list(seq) peut convertir toutes les séquences et objets itérables en une liste, avec les éléments et le tri inchangés.
Par exemple, list([1,2,3]) renvoie (1,2,3), list('abc') renvoie ['a', 'b', 'c']. Si le paramètre est une liste, elle en fera une copie comme set[:]

8 : Question d'entretien Python : Veuillez écrire un code Python pour supprimer les éléments en double dans une liste

Vous pouvez d'abord réorganiser la liste, puis numériser à partir de la fin de la liste. Le code est le suivant :

if List:
List.sort()
last = List[-1]
for i in range(len(List)-2, -1, -1):
if last==List[i]: del List[i]
else: last=List[i]

9 : Questions d'entretien sur l'opération de fichier Python

Comment supprimer un fichier en utilisant Python ?

Utilisez os.remove(filename) ou os.unlink(filename);

Comment copier un fichier en Python ?

Le module Shutil a une fonction copyfile qui permet de copier des fichiers

10 : Comment générer des nombres aléatoires en Python ?

La bibliothèque standard random implémente un générateur de nombres aléatoires. L'exemple de code est le suivant :

import random
random.random()
Il renverra un nombre aléatoire à virgule flottante entre 0 et 1

11:如何用Python来发送邮件?

可以使用smtplib标准库。
以下代码可以在支持SMTP监听器的服务器上执行。

import sys, smtplib
fromaddr = raw_input(”From: “)
toaddrs = raw_input(”To: “).split(’,&#39;)
print “Enter message, end with ^D:”
msg = ”
while 1:
line = sys.stdin.readline()
if not line:
break
msg = msg + line
# 发送邮件部分
server = smtplib.SMTP(’localhost’)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

12:Python里面如何拷贝一个对象?

一般来说可以使用copy.copy()方法或者copy.deepcopy()方法,几乎所有的对象都可以被拷贝
一些对象可以更容易的拷贝,Dictionaries有一个copy方法:

newdict = olddict.copy()

13:有没有一个工具可以帮助查找python的bug和进行静态的代码分析?

有,PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告
Pylint是另外一个工具可以进行coding standard检查。

14:如何在一个function里面设置一个全局的变量?

解决方法是在function的开始插入一个global声明:

def f()
global x

15:用Python匹配HTML tag的时候,eaf5515312973cd1e2c4aca2b4bd67a4和958f55c6e201f79be615af607c97dbf9有什么区别?

当重复匹配一个正则表达式时候, 例如e54b220469ea1f7eeecb6e69f5f72e2b, 当程序执行匹配的时候,会返回最大的匹配值

例如:

import re
s = ‘<html><head><title>Title</title>’
print(re.match(’<.*>’, s).group())

会返回一个匹配而不是

import re
s = ‘<html><head><title>Title</title>’
print(re.match(’<.*?>’, s).group())

则会返回
eaf5515312973cd1e2c4aca2b4bd67a4这种匹配称作贪心匹配 958f55c6e201f79be615af607c97dbf9称作非贪心匹配

16:Python里面search()和match()的区别?

match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none
例如:

print(re.match(’super’, ’superstition’).span())

会返回(0, 5)

print(re.match(’super’, ‘insuperable’))

则返回None
search()会扫描整个字符串并返回第一个成功的匹配
例如:

print(re.search(’super’, ’superstition’).span())

返回(0, 5)

print(re.search(’super’, ‘insuperable’).span())

返回(2, 7)

17:如何用Python来进行查询和替换一个文本字符串?

可以使用sub()方法来进行查询和替换,sub方法的格式为:sub(replacement, string[, count=0])
replacement是被替换成的文本
string是需要被替换的文本
count是一个可选参数,指最大被替换的数量
例子:

import re
p = re.compile(’(blue|white|red)’)
print(p.sub(’colour’,&#39;blue socks and red shoes’))
print(p.sub(’colour’,&#39;blue socks and red shoes’, count=1))

输出:

colour socks and colour shoes
colour socks and red shoes

subn()方法执行的效果跟sub()一样,不过它会返回一个二维数组,包括替换后的新的字符串和总共替换的数量
例如:

import re
p = re.compile(’(blue|white|red)’)
print(p.subn(’colour’,&#39;blue socks and red shoes’))
print(p.subn(’colour’,&#39;blue socks and red shoes’, count=1))

输出

(’colour socks and colour shoes’, 2)
(’colour socks and red shoes’, 1)

18:介绍一下except的用法和作用?

Python的except用来捕获所有异常, 因为Python里面的每次错误都会抛出 一个异常,所以每个程序的错误都被当作一个运行时错误。
一下是使用except的一个例子:

try:
foo = opne(”file”) #open被错写为opne
except:
sys.exit(”could not open file!”)

因为这个错误是由于open被拼写成opne而造成的,然后被except捕获,所以debug程序的时候很容易不知道出了什么问题
下面这个例子更好点:

try:
foo = opne(”file”) # 这时候except只捕获IOError
except IOError:
sys.exit(”could not open file”)

19:Python中pass语句的作用是什么?

pass语句什么也不做,一般作为占位符或者创建占位程序,pass语句不会执行任何操作,比如:

while False:
pass

pass通常用来创建一个最简单的类:

class MyEmptyClass:
pass

pass在软件设计阶段也经常用来作为TODO,提醒实现相应的实现,比如:

def initlog(*args):
pass #please implement this

20:介绍一下Python下range()函数的用法?

如果需要迭代一个数字序列的话,可以使用range()函数,range()函数可以生成等差级数。
如例:

for i in range(5)
print(i)

这段代码将输出0, 1, 2, 3, 4五个数字
range(10)会产生10个值, 也可以让range()从另外一个数字开始,或者定义一个不同的增量,甚至是负数增量
range(5, 10)从5到9的五个数字
range(0, 10, 3) 增量为三, 包括0,3,6,9四个数字
range(-10, -100, -30) 增量为-30, 包括-10, -40, -70
可以一起使用range()和len()来迭代一个索引序列
例如:

a = [&#39;Nina&#39;, &#39;Jim&#39;, &#39;Rainman&#39;, &#39;Hello&#39;]
for i in range(len(a)):
    print(i, a[i])

21:有两个序列a,b,大小都为n,序列元素的值任意整形数,

无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
将两序列合并为一个序列,并排序,为序列Source

拿出最大元素Big,次大的元素Small

在余下的序列S[:-2]进行平分,得到序列max,min

将Small加到max序列,将Big加大min序列,重新计算新序列和,和大的为max,小的为min。

Python代码

def mean( sorted_list ):
if not sorted_list:
return (([],[]))
big = sorted_list[-1]
small = sorted_list[-2]
big_list, small_list = mean(sorted_list[:-2])
big_list.append(small)
small_list.append(big)
big_list_sum = sum(big_list)
small_list_sum = sum(small_list)
if big_list_sum > small_list_sum:
return ( (big_list, small_list))
else:
return (( small_list, big_list))
tests = [   [1,2,3,4,5,6,700,800],
[10001,10000,100,90,50,1],
range(1, 11),
[12312, 12311, 232, 210, 30, 29, 3, 2, 1, 1]
]
for l in tests:
l.sort()
print
print “Source List:    ”, l
l1,l2 = mean(l)
print “Result List:    ”, l1, l2
print “Distance:    ”, abs(sum(l1)-sum(l2))
print ‘-*’*40

输出结果

Source List:    [1, 2, 3, 4, 5, 6, 700, 800]
Result List:    [1, 4, 5, 800] [2, 3, 6, 700]
Distance:       99
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Source List:    [1, 50, 90, 100, 10000, 10001]
Result List:    [50, 90, 10000] [1, 100, 10001]
Distance:       38
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Source List:    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Result List:    [2, 3, 6, 7, 10] [1, 4, 5, 8, 9]
Distance:       1
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Source List:    [1, 1, 2, 3, 29, 30, 210, 232, 12311, 12312]
Result List:    [1, 3, 29, 232, 12311] [1, 2, 30, 210, 12312]
Distance:       21
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

相关学习推荐: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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer