Heim  >  Artikel  >  Backend-Entwicklung  >  Acht Refactoring-Tipps, um Python-Code pythonischer zu machen

Acht Refactoring-Tipps, um Python-Code pythonischer zu machen

WBOY
WBOYnach vorne
2023-04-10 15:01:401868Durchsuche

1. Verschachtelte if-Anweisungen kombinieren

Wir fangen einfach an. Verschachteln Sie if-Anweisungen wie diese nicht, sondern kombinieren Sie sie einfach zu einer.

if a:
if b:
pass

# -> refactor
if a and b:
pas

2. Beliebig statt Schleife verwenden

Hier wollen wir prüfen, ob es mindestens ein positives Element in der Liste gibt. Eine längere Lösung besteht darin, alle Zahlen zu durchlaufen, die aktuelle Zahl zu überprüfen und dann abzubrechen, wenn die Bedingung erfüllt ist. Aber für diese Aufgabe gibt es in Python eine spezielle Methode, die Funktion „any“. any gibt True zurück, wenn ein Element der Iterable wahr ist. Dies ist viel kürzer und pythonischer als eine manuelle Schleife.

numbers = [-1, -2, -4, 0, 3, -7]
has_positives = False
for n in numbers:
if n > 0:
has_positives = True
break

# -> refactor
has_positives = any(n > 0 for n in numbers)

3. Extrahieren Sie Anweisungen aus for/while-Schleifen

Oft sehen Sie eine in der Schleife definierte Variable, die sich jedoch nie ändert. Dies sind unnötige Vorgänge. Ziehen Sie sie also aus der Schleife und Sie müssen sie dann nur noch einmal erstellen.

for building in buildings:
city = 'London'
addresses.append(building.street_address, city)

# -> refactor
city = 'London'
for building in buildings:
addresses.append(building.street_address, city)

4. Entfernen Sie Inline-Variablen, die nur einmal verwendet werden, und kehren Sie sofort zurück.

Oft sehen Sie Code, der eine Variable in der letzten Funktion definiert und eine Zeile später sofort zurückkehrt. Wenn Sie wissen, was die Funktion tut, geben Sie das Ergebnis einfach direkt zurück. Dies ist prägnanter und vermeidet unnötige Variablen. Wenn jedoch manchmal nicht klar ist, was die Funktion tut, können Sie der letzten Variablen einen aussagekräftigen Namen geben und sie als selbstdokumentierenden Code verwenden.

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

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

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

Anstatt die if else-Anweisung zum Festlegen des Werts einer Variablen zu verwenden, können Sie sie in einer Zeile mit einem if-Ausdruck wie diesem festlegen. Allerdings ist diese Rekonstruktionstechnik etwas fragwürdig. Manche Leute bevorzugen immer noch die erste Option, und das ist in Ordnung.

if condition:
x = 1
else:
x = 2

# -> refactor
x = 1 if condition else 2

6. Warnhinweis hinzufügen

Wenn man sich diesen Code ansieht, ist es schwer, schnell zu verstehen, was vor sich geht. Es gibt mehrere if-else-Anweisungen und mehrere Einrückungen. Wenn Sie genau hinschauen, werden Sie vielleicht bemerken, dass die erste if-Anweisung fast den gesamten Funktionscode abdeckt, nur dass wir am Ende die entsprechende else-Klausel haben und einfach False zurückgeben.

Wir können diese else-Klausel an den Anfang verschieben. Dies wird auch als Warnhinweis bezeichnet. Wenn die Bedingung also nicht wahr ist, werden wir den Rest des Funktionscodes nicht ausführen. Dadurch wird eine else-Klausel entfernt, und im gesamten Code gibt es nun eine Einrückungsebene weniger. Das sieht klarer und verständlicher aus.

def should_i_wear_this_hat(self, hat):
if isinstance(hat, Hat):
current_fashion = get_fashion()
weather_outside = self.look_out_of_window()
is_stylish = self.evaluate_style(hat, current_fashion)
if weather_outside.is_raining:
print("Damn.")
return True
else:
print("Great.")
return is_stylish
else:
return False

# -> refactor
def should_i_wear_this_hat(self, hat):
if not isinstance(hat, Hat):
return False

current_fashion = get_fashion()
weather_outside = self.look_out_of_window()
is_stylish = self.evaluate_style(hat, current_fashion)
if weather_outside.is_raining:
print("Damn.")
return True
else:
print("Great.")
return is_stylish

7. Verschieben Sie die Zuordnung näher an die Verwendung

Dies ist ein verbesserter Code gegenüber dem vorherigen Beispiel, aber es dauert noch einige Zeit, um zu verstehen, was hier vor sich geht. Deshalb wollen wir prüfen, ob wir einen Hut tragen sollten. Die Logik ist folgende: Wenn es regnet, sagen wir immer „True“, wenn es nicht regnet und wenn der Hut stilvoll ist, sagen wir immer „True“. Eine einfache Möglichkeit, die Lesbarkeit dieser Logik erheblich zu verbessern, besteht darin, die Zuordnung näher an ihre Verwendung heranzuführen. Wir müssen die Wetterbedingungen verstehen, bevor wir die if-Anweisung verwenden. Jetzt werden die Variablen fashion und style nur noch in der else-Klausel benötigt, also verschieben Sie sie nach unten. Es sollte jetzt klarer sein, was los ist.

In Punkt 4 oben können wir den Code weiter kürzen und die Ergebnisse des Bewertungsstils sofort zurückgeben. In diesem Fall ist is_stylish​ ein besserer Name, da er Ihnen sagt, dass Sie „True“ sagen, wenn der Hut stilvoll ist, andernfalls „False“. Behalten Sie also einfach die zusätzlichen Variablen hier.

def should_i_wear_this_hat(self, hat):
if not isinstance(hat, Hat):
return False

current_fashion = get_fashion()
weather_outside = self.look_out_of_window()
is_stylish = self.evaluate_style(hat, current_fashion)
if weather_outside.is_raining:
print("Damn.")
return True
else:
print("Great.")
return is_stylish

# -> refactor
def should_i_wear_this_hat(self, hat):
if not isinstance(hat, Hat):
return False

weather_outside = self.look_out_of_window()
if weather_outside.is_raining:
print("Damn.")
return True
else:
print("Great.")
current_fashion = get_fashion()
return self.evaluate_style(hat, current_fashion)
# is_stylish = self.evaluate_style(hat, current_fashion)
# return is_stylish

8. Vereinfachen Sie die Sequenzprüfung

Das ist eine weitere Sache, die ich oft sehe. Wenn Sie überprüfen müssen, ob ein Element in einer Sammlung vorhanden ist, beispielsweise in einer Liste, müssen Sie nicht schreiben, ob len(your_list) > 0 ist. Sie können einfach if your_list angeben. Dies ist der von Pep 8 empfohlene Ansatz, der auch als Wahrheitsprüfung bezeichnet wird. Dies ist möglich, weil in Python leere Sequenzen und Mengen als False ausgewertet werden. Dies kann also auf Zeichenfolgen, Tupel, Listen, Wörterbücher und Mengen angewendet werden.

if len(list_of_hats) > 0:
hat_to_wear = choose_hat(list_of_hats)

# -> refactor
if list_of_hats:
hat_to_wear = choose_hat(list_of_hats)

Das obige ist der detaillierte Inhalt vonAcht Refactoring-Tipps, um Python-Code pythonischer zu machen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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