Verschachtelte for-Schleifen in python in einer einzigen Zeile
Hier ist ein wenig code, den ich versuche zu machen, mehr lesbar. Es funktioniert, aber die geschachtelten for-Schleifen und try/wenn macht es ein bisschen schwer zu verstehen, auf den ersten Blick, was Los ist.
Kann mir jemand Vorschläge, wie ich könnte möglicherweise verbinden die verschachtelten for-Schleifen oder verdichten diesen code?
matcher = None
if re.match(_RE_OBJECT, nodes.replace(LQMN, '')):
matcher = alias
else:
for x in lister[0].conditions:
for y in x.codes:
try:
if y.id.split(',')[1] == condition:
matcher = x.codenames
except IndexError:
pass
- Ich glaube nicht, dass Sie machen den code "lesbarer", wenn Sie kondensieren, Ihre for-Schleifen in einer einzigen Zeile. Sind Sie auf der Suche, um einen kürzeren code, oder einen besser lesbaren code? (Ehrlich gesagt, dieser code ist nicht unlesbar oder tief über verschachtelte...)
- Im Idealfall versuchen, um besser lesbaren code.
- Ihre
for
loops &try:... except
block sind in Ordnung. Aber man könntere.compile()
auf Ihre_RE_OBJECT
. (Und würde der code Aussehen angenehmer, wenn Sie eingerückt mit 4 Leerzeichen anstelle von 2. IMHO). Und wenn es Ihr Ziel ist readibility, dann versuchen, aussagekräftigere Namen alsx
undy
. Kurz -, Wegwerf-Namen sind ok, im single-loops, aber Sie beginnen immer ein bisschen stumpf in tief verschachtelten code. - Dann setzen geschachtelten for-Schleifen wird nicht helfen, Ihre zu viel. Ich denke, das ist ziemlich lesbar, auch wenn ich nicht weiß, was
lister
ist, ich weiß, was Los ist. Zusätzlich wird die einzige änderung die ich machen würde ist eine tiefere Einkerbung. (Aber das könnte auch die Formatierung SO nicht im tatsächlichen code, afaik python-Einrückung (4 Räume). - Python ist es egal, wie groß die Einrückung Einheiten sind, solange Ihre dedents passen Sie Ihre Einzüge. Sie können Leerzeichen Einrücken - die ich oft in den interaktiven interpreter, aber es sieht wirklich hässlich in einem script, weil es macht es wirklich schwer zu verfolgen, was passiert.
- Ich meinte, "ist 4 Leerzeichen standardmäßig", so Reiter produziert 4 Räume, erhalten Sie automatisch 4 Leerzeichen Einzug-nach einem
:
etc...weit aus, dass es eine Konstante. - Das ist eine gängige Konvention in der modernen Editoren, aber nicht universal. Und es ist leicht geändert. FWIW, Python behandelt einen aktuellen tab-Zeichen (ich.e
\t
,chr(9)
) in der Quelle als äquivalent zu den (bis zu) 8 Räume, wie das ist, einen weit älteren übereinkommen. Siehe stackoverflow.com/questions/2034517/... und docs.python.org/2/reference/lexical_analysis.html#indentation . Aber ich denke, diese Diskussion entgleisen nerdinary die Frage ein wenig, also vielleicht sollten wir es weiter in der Python-Chat-Raum. - 2 Leerzeichen für die Einrückung ist ein standard zur Codierung von wo ich arbeite, also das ist nicht zu ändern. Ich benutzte x-und y hier nur für eine Frage, Sie haben die besseren Namen 🙂
- cool. Aber Sie haben mein Mitgefühl auf die 2 Leerzeichen Einrücken, was bei der Arbeit. 🙂 FWIW, ich habe 2 Leerzeichen eingerückt, als ich angefangen habe Python. Ich habe konvertiert, die meisten meiner alten code zu 4 Leerzeichen, aber ich gelegentlich in alte 2-Raum-Zeug, und es sieht einfach eng zu mir.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man einen generator-Ausdruck nest der Schleifen und fügen Sie einen filter, der macht der
IndexError
handler veraltet:Lesbarkeit verbessern würde, mehr durch die Verwendung aussagekräftiger Namen anders als
x
undy
hier aber:Können Sie ein-Linie, wenn und continue-Anweisungen anstelle der try-Anweisung:
und ersetzen eine_variable mit einem aussagekräftigen Namen.
try:... except block
ist oft schneller als die entsprechendenif
-basierten code.if
, aber wenn Geschwindigkeit wichtiger ist, die Sie verwenden würdentry:... except
.