Heim >Backend-Entwicklung >Python-Tutorial >Wie viel besser sind lokale Python-Variablen gegenüber globalen Variablen, Attributen oder Slots?

Wie viel besser sind lokale Python-Variablen gegenüber globalen Variablen, Attributen oder Slots?

Barbara Streisand
Barbara StreisandOriginal
2024-12-28 02:07:11521Durchsuche

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

Alternativ: Wie viel schlechter sind die anderen im Vergleich zu lokalen Variablen?

Was ist die große Sache?

Einige Artikel empfehlen Python-Programmierern, lokale Variablen zu verwenden, wenn diese häufig verwendet werden, auch wenn sie nur referenziert, aber nicht geändert werden.

Hier sind zum Beispiel zwei Zitate aus „Making Python Programs Blazing Fast“:

„Es gibt tatsächlich einen Unterschied in der Suchgeschwindigkeit, sogar zwischen – sagen wir mal – lokalen Variablen in der Funktion (am schnellsten), Attributen auf Klassenebene (z. B. self.name – langsamer) und globalen, beispielsweise importierten Funktionen wie time.time (am langsamsten). ."

"Nicht auf Attribute zugreifen

Eine weitere Sache, die Ihre Programme verlangsamen könnte, ist der Punktoperator (.), der beim Zugriff auf Objektattribute verwendet wird. Dieser Operator löst die Wörterbuchsuche mit getattribute aus, was zu zusätzlichem Overhead in Ihrem Code führt. „

Außerdem sind dies nicht die einzigen Möglichkeiten. Was ist mit den Unterschieden zwischen:

  • Klassenattribute,
  • Instanzattribute,
  • Slot-Instanzattribute,
  • Methodenattribute und
  • Funktionsattribute (Nicht-Methodenattribute)?

Testen

Ich habe getestet, indem ich all dies in Schleifen mit 1.000.000 Iterationen verwendet habe, aber nur minimale Arbeit pro Iteration darin. Die Funktionen waren alle Methoden einer Klasse, mit Ausnahme der Funktion, die zum Testen von Funktionsattributen für Funktionen außerhalb einer Klasse verwendet wurde.

Eine typische Funktion hatte die Form:

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

Der gesamte Code befindet sich am Ende dieses Beitrags.

Ergebnisse

|                                        |      |        | 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% |

Erklärung:
Wenn Sie die Leistung vergleichen, vergleichen Sie immer (Erfolge/Ressource), wie etwa Meilen pro Gallone oder Berechnungen pro Sekunde, und nicht Liter pro Kilometer oder Sekunden pro Berechnung.

  • Zeit ist wie von timeit angegeben, begrenzt auf 3 signifikante Ziffern.
  • Rate ist der Kehrwert der Zeit. Wie viele davon pro Sekunde.
  • Relative Leistung ist die Quote im Vergleich zum Besten. Unter Verwendung der relativen Leistung gilt: größer ist besser und doppelt so groß ist doppelt so gut.

Erkenntnisse

Ja, die lokalen Variablen sind am schnellsten.

Die Leistung der verschiedenen Arten von Variablen, gruppiert in drei Gruppierungen.

  1. Lokale, globale und geslotte Variablen für Klasseninstanzen: Globale Variablen sind 96 % so schnell wie lokale Variablen, während geslotte Attribute für Klasseninstanzen 92 % so schnell sind.
  2. Klassenattribut, Nicht-Slot-Klasseninstanzattribut und Funktionsattribut: Diese führen jeweils zu 62 %, 59 % und 55 % einer lokalen Variablen aus.
  3. Methodenattribut: Die Verwendung eines Methodenattributs ist eine Klasse für sich und erreicht 31 % der Leistung einer lokalen Variablen.

Schlussfolgerungen

Die Überraschung ist, dass Globale im Vergleich zur allgemeinen Meinung die zweitbesten sind, sogar besser als geslotte Instanzattribute in einer Klasse. Eine weitere Überraschung ist, dass Methodenattribute am schlechtesten sind.

Code

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

Das obige ist der detaillierte Inhalt vonWie viel besser sind lokale Python-Variablen gegenüber globalen Variablen, Attributen oder Slots?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn