Maison  >  Article  >  développement back-end  >  Sept habitudes pour améliorer les performances des programmes Python

Sept habitudes pour améliorer les performances des programmes Python

WBOY
WBOYavant
2023-04-16 18:01:03617parcourir

Sept habitudes pour améliorer les performances des programmes Python

1. Utiliser des variables locales

Essayez d'utiliser des variables locales au lieu de variables globales : pour faciliter la maintenance, améliorer les performances et économiser de la mémoire.

Remplacez les variables dans l'espace de noms du module par des variables locales, par exemple ls = os.linesep. D'une part, cela peut améliorer les performances du programme et accélérer les recherches de variables locales ; d'autre part, des identifiants courts peuvent être utilisés pour remplacer de longues variables de module afin d'améliorer la lisibilité.

2. Réduisez le nombre d'appels de fonction

Lors du jugement du type d'objet, il est préférable d'utiliser isinstance(), suivi de l'identité du type d'objet (id()) et la valeur de l'objet (type()) est la dernier.

#判断变量num是否为整数类型
type(num) == type(0) #调用三次函数
type(num) is type(0) #身份比较
isinstance(num,(int)) #调用一次函数

Ne mettez pas le contenu des opérations répétées comme paramètres dans des conditions de boucle pour éviter les opérations répétées.

#每次循环都需要重新执行len(a)
while i < len(a):
statement
#len(a)仅执行一次
m = len(a)
while i < m:
statement

Si vous devez utiliser une fonction ou un objet Y dans le module X, vous devez utiliser directement from X import Y au lieu d'importer X.Y. De cette façon, lors de l'utilisation de Y, une requête peut être réduite (l'interpréteur n'a pas besoin de trouver d'abord le module X puis de rechercher Y dans le dictionnaire du module X).

3. Utilisez le mappage au lieu de la recherche conditionnelle

La vitesse de recherche du mappage (comme dict, etc.) est beaucoup plus rapide que celle des instructions conditionnelles (comme if, etc.). Il n'y a pas non plus d'instruction select-case en Python.

#if查找
if a == 1:
b = 10
elif a == 2:
b = 20
...
#dict查找,性能更优
d = {1:10,2:20,...}
b = d[a]

4. Itérer directement les éléments de séquence

Pour les séquences (str, liste, tuple, etc.), itérer directement les éléments de séquence est plus rapide que l'itération de l'index des éléments.

a = [1,2,3]
#迭代元素
for item in a:
print(item)
#迭代索引
for i in range(len(a)):
 print(a[i])

5. Utilisez des expressions génératrices pour remplacer la compréhension de liste

La compréhension de liste (compréhension de liste) générera une liste entière, ce qui aura un effet négatif sur l'itération de grandes quantités de données.

L'expression génératrice ne crée pas réellement de liste, mais renvoie un générateur qui produit une valeur en cas de besoin (calcul paresseux), ce qui est plus convivial pour la mémoire.

#计算文件f的非空字符个数
#生成器表达式
l = sum([len(word) for line in f for word in line.split()])
#列表解析
l = sum(len(word) for line in f for word in line.split())

6. Compilez d'abord, puis appelez

Lorsque vous utilisez les fonctions eval() et exec() pour exécuter du code, il est préférable d'appeler l'objet code (compilé à l'avance en bytecode via la fonction compile()) au lieu d'appeler str directement , ce qui peut éviter des processus de compilation répétés et améliorer les performances du programme.

La correspondance de modèle d'expression régulière est similaire. Il est également préférable de compiler le modèle d'expression régulière dans un objet regex (via la fonction re.complie()) avant d'effectuer la comparaison et la correspondance.

7. Habitudes de programmation du module

L'instruction Python de plus haut niveau (code sans indentation) dans le module sera exécutée lorsque le module est importé (qu'il soit vraiment nécessaire de l'exécuter). Par conséquent, vous devriez essayer de mettre tous les codes de fonction du module dans des fonctions, y compris les codes de fonction liés au programme principal, qui peuvent également être placés dans la fonction main(), et le programme principal lui-même appelle la fonction main(). .

Vous pouvez écrire du code de test dans la fonction main() du module. Dans le programme principal, vérifiez la valeur de name. S'il s'agit de « main » (indiquant que le module est exécuté directement), appelez la fonction main() et effectuez des tests s'il s'agit du nom du module (indiquant que le module est exécuté directement). module est appelé), aucun test ne sera effectué.

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