perflint#
perflint ist eine Erweiterung für pylint für Performance-Anti-Patterns, u.a.:
- W8101:
unnecessary-list-cast Unnötige Verwendung von
list()bei einem bereits iterierbarem Typ.- W8102:
incorrect-dictionary-iterator Falsche Iterator-Methode für
dict: Python-Dictionaries speichern Schlüssel und Werte in zwei separaten Tabellen. Sie können einzeln iteriert werden. Die Verwendung von.items()und das Verwerfen entweder des Schlüssels oder des Wertes mit_ist ineffizient, wenn stattdessen.keys()oder.values()verwendet werden können.- W8201:
loop-invariant-statement Die Schleife wird untersucht, um Anweisungen oder Ausdrücke zu ermitteln, deren Ergebnis bei jeder Iteration einer Schleife konstant ist, da sie auf benannten Variablen basieren, die während der Iteration nicht verändert werden.
- W8202:
loop-global-usage Globale Namensverwendung in einer Schleife: Das Laden globaler Variablen ist langsamer als das Laden lokaler Variablen. Der Unterschied ist marginal, aber wenn er in einer Schleife weitergegeben wird, kann es zu einer spürbaren Geschwindigkeitsverbesserung kommen.
- R8203:
loop-try-except-usage Bis Python 3.10 sind
try…except-Blöcke im Vergleich zuif-Anweisungen sehr rechenintensiv.Vermeidet es, sie in einer Schleife zu verwenden, da sie erhebliche Overheads verursachen können. Refaktoriert euren Code so, dass keine iterationsspezifischen Details erforderlich sind und legt die gesamte Schleife in den
try-Block.- W8204:
memoryview-over-bytes Das Slicing von Byte-Objekten in Schleifen ist ineffizient, da eine Kopie der Daten erstellt wird. Verwendet stattdessen
memoryview().- W8205:
dotted-import-in-loop Der direkte Import des Namens
%sist in einer Schleife effizienter. In Python könnt ihr ein Modul importieren und dann auf Untermodule als Attribute zugreifen. Ihr könnt auch auf Funktionen als Attribute dieses Moduls zugreifen. Dadurch werden die Importanweisungen minimal gehalten. Wenn ihr diese Methode jedoch in einer Schleife verwendet, ist sie ineffizient, da bei jedem Schleifendurchlauf erst global, dann das Attribut und dann die Methode geladen wird.- W8301:
use-tuple-over-list Verwendet ein Tupel anstelle einer Liste für eine unveränderliche Sequenz: Sowohl die Konstruktion als aoch die Indizierung eines Tupels ist schneller als die einer Liste.
- W8401:
use-list-comprehension Verwendet List Comprehensions mit oder ohne
if-Anweisung anstelle einerfor-Schleife.- W8402:
use-list-copy Verwendet eine Listenkopie mit
list.copy()anstelle einerfor-Schleife.- W8403:
use-dict-comprehension Verwendet ein Dictionary Comprehensions anstelle einer einfachen
for-Schleife.