Python-Datenstrukturalgorithmus, Frage 14: benannte Slices

Frage:

Ihr Programm verfügt über eine Reihe hartcodierter Slice-Indizes, die nicht mehr sichtbar sind, und Sie möchten den Code bereinigen.

Lösung:

Angenommen, Sie verfügen über einen Code, der bestimmte Datenfelder aus mehreren festen Stellen in einer Datensatzzeichenfolge (z. B. einer Datei oder einem ähnlichen Format) extrahiert:

######    0123456789012345678901234567890123456789012345678901234567890'
record = '....................100 .......513.25 ..........'
cost = int(record[20:23]) * float(record[31:37])

Warum willst du die Scheiben nicht so benennen?

SHARES = slice(20, 23)
PRICE = slice(31, 37)
cost = int(record[SHARES]) * float(record[PRICE])

Sie vermeiden viele unverständliche, fest codierte Indizes, wodurch Ihr Code viel klarer und lesbarer wird.

Im Allgemeinen wird die Lesbarkeit und Wartbarkeit erheblich beeinträchtigt, wenn im Code eine große Anzahl fest codierter Indexwerte angezeigt wird. Wenn Sie beispielsweise auf den Code zurückblicken, den Sie vor einem Jahr geschrieben haben, werden Sie sich am Kopf kratzen und sich fragen, was Sie damals tun wollten. Die Lösung hier ist eine einfache Möglichkeit, klarer auszudrücken, was Ihr Code tut.
Die integrierte Funktion „slice()“ erstellt ein Slice-Objekt, das überall dort verwendet werden kann, wo ein Slice zulässig ist. Zum Beispiel:

>>> items = [0, 1, 2, 3, 4, 5, 6] >>> a = slice(2, 4)
>>> items[2:4]
[2, 3]
>>> items[a]
[2, 3]
>>> items[a] = [10,11] >>> items
[0, 1, 10, 11, 4, 5, 6] >>> del items[a]
>>> items
[0, 1, 4, 5, 6]

Wenn Sie über ein Slice-Objekt a verfügen, können Sie dessen Eigenschaften a.start, a.stop bzw. a.step aufrufen, um weitere Informationen zu erhalten.

>>> a = slice(5, 50, 2) >>> a.start
5
>>> a.stop
50
>>> a.step 2
>>>

Sie können ein Slice auch einer Größensequenz zuordnen, indem Sie die Methode indices(size) aufrufen, die ein Tripel (Start, Stop, Schritt) zurückgibt, wobei alle Werte entsprechend skaliert sind, um die Grenzen einzuhalten. Dadurch werden IndexError-Ausnahmen vermieden, wenn sie verwendet werden.

>>> s = 'HelloWorld'
>>> a.indices(len(s))
(5, 10, 2)
>>> for i in range(*a.indices(len(s))): ... print(s[i])
...
W r

おすすめ

転載: blog.csdn.net/m0_68635815/article/details/135439648