Ich möchte eine große Python-Funktion in kleinere umwandeln. Betrachten Sie zum Beispiel folgendes Code-Snippet:Python: Vermeidung von Pylint-Warnungen über zu viele Argumente
x = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
Natürlich ist dies ein triviales Beispiel. In der Praxis ist der Code komplexer. Mein Punkt ist, dass es viele lokale-scope Variablen enthält, die der extrahierten Funktion übergeben werden müssten, die wie folgt aussehen könnte:
def mysum(x1, x2, x3, x4, x5, x6, x7, x8, x9):
x = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
return x
Das Problem ist, dass Pylint eine Warnung über zu viele Argumente auslösen würde. Ich konnte die Warnung vermeiden, indem etwas zu tun, wie:
def mysum(d):
x1 = d['x1']
x2 = d['x2']
...
x9 = d['x9']
x = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
return x
def mybigfunction():
...
d = {}
d['x1'] = x1
...
d['x9'] = x9
x = mysum(d)
aber dieser Ansatz loos mich hässlich, es erfordert eine Menge Code zu schreiben, die auch redundant ist.
Gibt es einen besseren Weg, es zu tun?
Ich glaube, dass mysum() vereinfacht werden könnte: 'return sum (d.values ())' oder zumindest 'return sum ([d [foo] für foo in (' x1 ',' x2 ', .. ., "x9")]). Bin ich zu glücklich, um Listen zu verstehen? – MatrixFrog
Das mysum() ist nur eine Abstraktion, in realen Szenarien ist der Code, der extrahiert werden muss, viel komplexer. Es geht darum, viele Variablen an die extrahierte Funktion zu übergeben und die pylint-Warnung möglichst zu vermeiden (ohne dass pylint explizit dazu gezwungen wird, diese Warnung einfach zu ignorieren). – Anonymous