Globale Variablen sind langsam

Aus Micropython Referenz
Zur Navigation springen Zur Suche springen

Globalen Variablen wird nachgesagt, sie seien langsam.
Ich bin auf diesen Python Code: Local vs Global Variables Artikel gestoßen.
Der Verfasser begründet das so:

Hinter den Kulissen passiert folgendes:

  1. Python sucht zunächst im lokalen Bereich der Funktion nach global_var.
  2. Wenn es global_var nicht lokal findet, sucht es im umgebenden Bereich, der in diesem Fall der globale Bereich ist.
  3. Dieser Prozess der Bereichsprüfung findet in jeder Iteration der Schleife statt und führt zu unnötigem Overhead.

Er hat dazu ein Beispiel angeführt, dass ich nachvollzogen habe.
Hier die Micropythontestumgebung:

MicroPython v1.24.0 on 2024-10-25; ESP32C6 module with ESP32C6

Hier mein Programmcode:

# global_test_001.py


from time import ticks_us

global_var = 10

def func1():
    ans = 0
    for i in range(1000):
        ans += global_var * i
    return ans

start = ticks_us()
func1()
stop = ticks_us()
print(f'Mit globaler Variablen {stop-start} µs.')

def func2():
    ans = 0
    local_var = global_var  # Copy the global variable to a local variable
    for i in range(1000):
        ans += local_var * i  # Use the local variable instead
    return ans

start = ticks_us()
func2()
stop = ticks_us()
print(f'Mit lokaler Variablen {stop-start} µs.')

def func3(local_var):
    ans = 0
    for i in range(1000):
        ans += local_var * i  # Use the local variable instead
    return ans

start = ticks_us()
func3(global_var)
stop = ticks_us()
print(f'Mit Variable als Parameter {stop-start} µs.')

Hier das Ergebnis:

Mit globaler Variablen 4707 µs.
Mit lokaler Variablen 4051 µs.
Mit Variable als Parameter 4042 µs.

Globale Variablen sind also tatsächlich langsamer. Hier um ca. 14%.


Navigation[Bearbeiten | Quelltext bearbeiten]

Zurück zur Hauptseite
Zurück zur Python Übersichtseite
Zurück zur Variablen Übersichtseite