Heim > Artikel > Backend-Entwicklung > So überarbeiten Sie langen Python-Code
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
count = count + other_valuekann durch den folgenden Code ersetzt werden:
count += other_valueDer 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
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
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
if condition: x = 1 else: x = 2
x = 1 if condition else 2Das 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])
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:
Allerdings wäre es sauberer, das Ergebnis direkt zurückzugeben, etwa so:def function(): if isinstance(a, b) or issubclass(b, a): return True return False
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
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!