Hallo
@jbs
das ist Teil einer Addin-funktion für Calc (Libre-office/ AOo und Derivate)
Offensichtlich dient sie zur "sortierten" Ausgabe eines Zellbereichs.
BlackJack hat geschrieben:@karolus: Was ich daran besonders unschön finde, ist dass `naturalkey()` in Abhängigkeit von `flags` recht unterschiedliche Dinge tut und diese immer wieder selben Entscheidungen für jedes Element aufs neue trifft, obwohl es stets im gleichen Zweig landet. Ich würde diese Entscheidungen vor dem Sortieren in einer Funktion zusammenfassen, also eine Funktion, welche `field` und `flags` übergeben bekommt und eine passende `key`-Funktion dazu zurück gibt.
Ja, ich kann den key in Reihenfolge der Priorität auf einmal in 'key= ..' übergeben - aber dann gilt die festgelegte Sortierreihenfolge 'reverse=...' für den ganzen Schlüssel !?***
in der Version oben kann man eine auf-/absteigende Sortierung für jedes Schlüsselelement individuell festlegen.
BlackJack hat geschrieben:In `naturalkey()` so wie es jetzt ist, könnte man mal aufräumen. Nur ein ``return key`` am Ende und der `else`-Zweig dort kann ersatzlos wegfallen. Da wird nichts gemacht was am Ergebnis etwas ändern würde.
Im `else` Zweig wird schon noch etwas gemacht, es wird entschieden ob Zahlen vor oder nach Text eingeordnet werden ( in Abhängigkeit von Flag: 't' )
BlackJack hat geschrieben:Statt ``not a in b`` sollte man ``a not in b`` schreiben um einen Operator einzusparen. ``not in`` ist *ein* Operator.
Anstelle von ``sequence[::-1]`` würde ich ``reversed(sequence)`` verwenden. Das Funktioniert bei jedem endlichem, iterierbaren Objekt und legt im Fall von Listen zum Beispiel auch keine Kopie der Liste an.
Der Rückgabewert von `main_sort()` ist entweder eine Liste oder eine Zeichenkette mit einem Fehler — das ist genau die Art von unschöner API die man durch Ausnahmen unnötig macht. Und Du wandelst Ausnahmen wieder in diesen Problemfall zurück.
'not a in b' und x[::-1] sind schlechte Angewohnheiten - werde ich ändern, statt der Fehlerrückgabe war da vorher ein 'print '%s' %error , um beim Testen mal ein paar Infos in der Konsole zu bekommen.
***[edit]: Könnte man einzelne Schlüsselfelder so "invertieren" das eine umgekehrte Sortierreihenfolge erreicht wird ???
[/edit]
Karolus