Maison > développement back-end > Tutoriel Python > Dans quelle mesure les variables locales Python sont-elles meilleures que les variables globales, les attributs ou les emplacements ?

Dans quelle mesure les variables locales Python sont-elles meilleures que les variables globales, les attributs ou les emplacements ?

Barbara Streisand
Libérer: 2024-12-28 02:07:11
original
517 Les gens l'ont consulté

How much better are python local variables over globals, attributes, or slots?

Alternativement, dans quelle mesure les autres sont-ils pires par rapport aux variables locales ?

Quel est le problème ?

Certains articles conseillent aux programmeurs Python d'utiliser des variables locales si elles seront beaucoup utilisées, même si elles sont seulement référencées mais non modifiées.

Par exemple, voici deux citations de « Making Python Programs Blazing Fast » :

"Il y a en fait une différence dans la vitesse de recherche, même entre - disons - une variable locale dans la fonction (la plus rapide), un attribut au niveau de la classe (par exemple self.name - plus lent) et une fonction globale par exemple importée comme time.time (la plus lente) ".

"Ne pas accéder aux attributs

Une autre chose qui pourrait ralentir vos programmes est l'opérateur point (.) qui est utilisé lors de l'accès aux attributs d'objet. Cet opérateur déclenche la recherche dans le dictionnaire à l'aide de getattribute, ce qui crée une surcharge supplémentaire dans votre code. "

De plus, ce ne sont pas les seules possibilités. Qu'en est-il des différences entre :

  • Attributs de classe,
  • Attributs d'instance,
  • Attributs de l'instance d'emplacement,
  • Attributs de méthode, et
  • Attributs de fonction (non-méthode) ?

Essai

J'ai testé en utilisant tout cela dans des boucles avec 1 000 000 d'itérations, mais un travail minimal par itération à l'intérieur de celles-ci. Les fonctions étaient toutes des méthodes d'une classe, à l'exception de la fonction utilisée pour tester les attributs de fonction pour les fonctions en dehors d'une classe.

Une fonction typique était de la forme :

      def testINSA(self):
          s=0
          for i in range(10000000):
            s+=self.INSA # what is after the = differs in each function.
          return s    

Copier après la connexion
Copier après la connexion

Tout le code est au bas de cet article.

Résultats

|                                        |      |        | Relative |
| Where                                  | Time | Rate   | Performance |
| LV Local Variable                      | 1.92 | 0.5208 | 100% |
| GV Global Variable                     | 1.99 | 0.5020 | 96% |
| ISA Instance Slotted Attribute         | 2.09 | 0.4789 | 92% |
| CA Class Attribute                     | 3.12 | 0.3204 | 62% |
| INSA Instance Non-Slotted Attribute    | 3.28 | 0.3051 | 59% |
| FA Function Attribute              | 3.49 | 0.2865 | 55% |
| MA Method Attribute                | 6.29 | 0.1589 | 31% |

Copier après la connexion

Explication :
Lorsque vous comparez les performances, comparez toujours les (Réalisations/Ressources), telles que les miles par gallon ou les calculs par seconde, plutôt que les litres par km ou les secondes par calcul.

  • L'heure est celle indiquée par timeit, limitée à 3 chiffres significatifs.
  • Le taux est l'inverse du temps. Combien d'entre eux par seconde.
  • La Performance relative est le taux par rapport aux meilleurs. En utilisant les performances relatives, plus c'est gros, mieux c'est, et deux fois plus gros, c'est deux fois mieux.

Résultats

Oui, les variables locales sont les plus rapides.

Les performances des différents types de variables regroupées en trois groupes.

  1. Variables locales, globales et variables à emplacements d'instance de classe : Les variables globales sont 96 % plus rapides que les variables locales, tandis que les attributs à emplacements d'instance de classe sont 92 % plus rapides.
  2. Attribut de classe, attribut d'instance de classe non-sloted et attribut de fonction : Ceux-ci fonctionnent respectivement à 62 %, 59 % et 55 % d'une variable locale.
  3. Attribut de méthode : L'utilisation d'un attribut de méthode est dans une classe à part, à 31 % des performances d'une variable locale.

Conclusions

La surprise est que par rapport à la sagesse commune, les globaux sont le deuxième meilleur, même meilleur que les attributs d'instance à emplacements dans une classe. Une autre surprise est que les attributs de méthode sont les pires.

Code

      def testINSA(self):
          s=0
          for i in range(10000000):
            s+=self.INSA # what is after the = differs in each function.
          return s    

Copier après la connexion
Copier après la connexion

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!

source:dev.to
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal