Heim  >  Artikel  >  Backend-Entwicklung  >  So überarbeiten Sie langen Python-Code

So überarbeiten Sie langen Python-Code

WBOY
WBOYnach vorne
2023-05-20 21:11:30720Durchsuche

1. Konvertieren Sie die for-Schleife in einen Listen-/Wörterbuch-/Mengenausdruck.

Zum Beispiel können wir eine Liste kubischer Zahlen erstellen und diese iterativ füllen. Die Standardmethode in den meisten Sprachen lautet wie folgt:

cubes = []
for i in range(20):
    cubes.append(i ** 3)

In Python können wir Listenausdrücke verwenden, um die erforderlichen Daten zu generieren. Dieser Code kann in einer Zeile komprimiert werden, um die Definition der Liste und langwierige Füllvorgänge zu vermeiden.

cubes = [i ** 3 for i in range(20)]

Sehen Sie, wir haben drei Codezeilen in eine Zeile umgewandelt, was zweifellos eine gute Wahl ist – Ihre Augen müssen den Code nicht nach oben, unten, links und rechts überprüfen.

Durch die Komprimierung des Codes auf eine Zeile wird die Lesbarkeit erschwert, dies gilt jedoch nicht für abgeleitete Ausdrücke. Sobald Sie sich mit der Syntax vertraut gemacht haben, werden alle benötigten Elemente sehr klar dargestellt, sodass sie leichter zu lesen ist als die For-Loop-Version.

Ein weiterer Punkt ist, dass die Zuweisung jetzt eher einer atomaren Operation ähnelt – wir deklarieren, was Würfel sind, anstatt Anweisungen zu geben, wie man sie baut. Dadurch ist der Code einfacher zu lesen, da wir uns auf die Bedeutung der Variablenwürfel konzentrieren und nicht darauf, wie er aufgebaut ist.

Schließlich sind Ausdrücke oft schneller als der Aufbau einer Sammlung in einer Schleife, was auch ein wichtiger Faktor ist, wenn es um Leistung geht.

2. Ersetzen Sie die Zuweisung durch eine inkrementelle Zuweisung

Die inkrementelle Zuweisung ist eine schnelle und einfache Python-Syntax.

Jeder Code wie dieser:

count = count + other_value

kann durch den folgenden Code ersetzt werden:

count += other_value

Der Code ist kurz und klar – wir nicht Erwägen Sie, die Variable zweimal zu zählen. Es stehen auch mehrere Operatoren zur Verfügung, darunter Minus gleich (-=), bitweises UND gleich (&=), Division gleich (/=) und Multiplikation gleich (*=).

Sie müssen vorsichtig sein, da für den Typ, den Sie zuweisen, der entsprechende Operator definiert sein muss. Beispielsweise unterstützen Numpy-Arrays die Operation /= nicht.

3. Inline-Variablen, die nur einmal verwendet werden

Eine Situation, die wir häufig im Code von Menschen sehen, besteht darin, das Ergebnis einer temporären Variablen zuzuweisen und dann schick es sofort zurück.
def state_attributes(self):
    """Return the state attributes."""
    state_attr = {
        ATTR_CODE_FORMAT: self.code_format,
        ATTR_CHANGED_BY: self.changed_by,
    }
    return state_attr

Tatsächlich ist es eine bessere Möglichkeit, das Ergebnis direkt zurückzugeben, anstatt eine temporäre Variable zum Speichern des Ergebnisses zu verwenden

def state_attributes(self):
    """Return the state attributes."""
    return {
        ATTR_CODE_FORMAT: self.code_format,
        ATTR_CHANGED_BY: self.changed_by,
    }

Dies kann den Code kürzen und unnötige Variablen löschen. Dadurch wird der mentale Aufwand beim Lesen von Code verringert.

Temporäre Variablen können nützlich sein, wenn sie als Parameter oder Bedingungen verwendet werden und der Name ihren Inhalt widerspiegelt. Im obigen Beispiel wird nur das Statusattribut zurückgegeben und state_attr stellt keine zusätzlichen Informationen bereit. Es ist also nicht notwendig, das Ergebnis einer temporären Variablen zuzuweisen.

4. Ersetzen Sie die if-Anweisung durch einen if-Ausdruck

Eine häufig auftretende Situation ist, dass Sie häufig eine Variable festlegen möchten aus zwei unterschiedlichen Werten.
if condition:
    x = 1
else:
    x = 2

Dies kann mit Pythons Syntax für bedingte Ausdrücke (Pythons Version des ternären Operators) in einer Zeile geschrieben werden:

x = 1 if condition else 2

Das ist definitiv prägnanter, aber kontroverser Refactorings (wie Listenausdrücke). Einige Programmierer mögen diesen Ausdruck nicht, weil sie ihn schwieriger zu verstehen finden, als die Bedingung vollständig in einer if-Anweisung aufzuschreiben.

Diese Verbesserung kann die Effizienz verbessern, wenn bedingte Ausdrücke kürzer sind und kombiniert werden können, was unserer Meinung nach der Fall ist. Ähnlich wie beim Beispiel für einen Listenausdruck müssen wir beim Lesen von Code normalerweise nicht wissen, wie x zugewiesen wird. Wir sehen nur, wie es zugewiesen wird und dann weitergeht.

5. Verwenden Sie Generatoren, um unnötige Ausdrücke zu ersetzen Generator als Parameter, nicht als Sammlung. Das bedeutet, dass Sie den Code anstelle von

hat_found = any([is_hat(item) for item in wardrobe])

wie folgt ändern können:
hat_found = any(is_hat(item) for item in wardrobe)
Dadurch werden ein Klammerpaar entfernt und der Code etwas klarer. Wenn die Funktion „any“ ein Ergebnis findet, kehrt sie sofort zurück, ohne dass die gesamte Liste erstellt werden muss. Dies kann zu Leistungsverbesserungen führen.

Bitte beachten Sie, dass wir den Generator tatsächlich an any() übergeben. Genau genommen sollte der Code so aussehen:

hat_found = any(is_hat(item) for item in wardrobe)

Aber Python erlaubt Ihnen, dieses Klammerpaar wegzulassen . Im Folgenden sind die Standardbibliotheksfunktionen aufgeführt, die Generatoren akzeptieren:

'all', 'any', 'enumerate', 'frozenset', 'list', 'max', 'min', 'set', 'sum', 'tuple'

6 Vereinfachen Sie die Bedingung in eine Return-Anweisung

# 🎜🎜# Die letzte eingeführte Refactoring-Technik besteht darin, dass die Funktion ein Wahr- oder Falsch-Ergebnis zurückgeben muss. Ein gängiger Ansatz ist:
def function():
    if isinstance(a, b) or issubclass(b, a):
        return True
    return False
Allerdings wäre es sauberer, das Ergebnis direkt zurückzugeben, etwa so:

def function():
    return isinstance(a, b) or issubclass(b, a)
Nur wenn der Ausdruck einen booleschen Wert ergibt, nur in Auf diese Weise kann es getan werden. Beispielsweise können Sie in
def any_hats():
    hats = [item for item in wardrobe if is_hat(item)]
    if hats or self.wearing_hat():
        return True
    return False

bool() verwenden, um hat und self.wearing_hat() in einer Bool-Liste zu kombinieren, wodurch die if-Bedingung eliminiert und das Programm vereinfacht wird.

def any_hats():
    hats = [item for item in wardrobe if is_hat(item)]
    return bool(hats or self.wearing_hat())

Das obige ist der detaillierte Inhalt vonSo überarbeiten Sie langen Python-Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen