Disable globale Variable Lookup in Python

urz gesagt, die Frage: Gibt es eine Möglichkeit zu verhindern, dass Python Variablen außerhalb des aktuellen Bereichs sucht?

Einzelheiten

Python sucht in äußeren Bereichen nach Variablendefinitionen, wenn diese im aktuellen Bereich nicht definiert sind. Daher kann Code wie dieser brechen, wenn er beim Refactoring nicht vorsichtig genug ist:

def line(x, a, b):
    return a + x * b

a, b = 1, 1
y1 = line(1, a, b)
y2 = line(1, 2, 3)

Wenn ich die Funktionsargumente umbenannte, aber vergaß, sie innerhalb des Funktionskörpers umzubenennen, würde der Code weiterhin ausgeführt:

def line(x, a0, b0):
    return a + x * b  # not an error

a, b = 1, 1
y1 = line(1, a, b)  # correct result by coincidence
y2 = line(1, 2, 3)  # wrong result

Ich kennes ist keine gute Praxis, Namen von @ zu beschatte äußere Bereiche. Es gibt jedoch einige Gründe, warum dies sowieso getan wird:

anchmal kann es sinnvoll sein, dieselben Namen zu haben, weil sie sich auf dasselbe bezieheMöglicherweise gehen einem die aussagekräftigen Variablennamen aus.Faulhei

Gibt es eine Möglichkeit, zu verhindern, dass Python Variablen außerhalb des aktuellen Bereichs sucht? (Damit der Zugriff aufa oderb löst im zweiten Beispiel einen Fehler aus.)

Aus Gründen der Faulheit würde ich eine Lösung vorziehen, die ohne wiederholten Kesselschildcode funktioniert:)

Wenn das Problem in Bezug auf die Python-Version nicht eindeutig ist, bin ich hauptsächlich an Python 3.3 und höher interessiert.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage