Die folgende Sortiermethode funktioniert einwandfrei.Stellen Sie einen Teil einer Lambda-Funktion im Voraus ein, um wiederholten Code zu vermeiden
def sort_view_items(self):
cs = self.settings.case_sensitive
if self.settings.sort_by_file_name:
sk = lambda vi: (vi.name if cs else vi.name.lower(), vi.group, vi.tab)
elif self.settings.sort_by_folder:
sk = lambda vi: (vi.folder, vi.name if cs else vi.name.lower())
elif self.settings.sort_by_syntax:
sk = lambda vi: (vi.syntax, vi.name if cs else vi.name.lower())
elif self.settings.sort_by_indexes:
sk = lambda vi: (vi.group, vi.tab)
self.view_items.sort(key = sk)
Jedoch ist der Groß- und Kleinschreibung entsprechende Abschnitt des Lambda vi.name if cs else vi.name.lower()
3 Mal verwendet wird, das Gen wiederholt meines Code irks.
Aus Interesse, kann der Fallaspekt im Voraus irgendwie eingestellt werden, aber ohne dauernde Änderungen am name
Attribut oder so in einer temporären Kopie der view_items
Liste vorzunehmen?
Zum Beispiel habe ich versucht, mit einem Lambda in einem Lambda, die ich nicht dachte, würde funktionieren und, ratet mal, was es nicht. Obwohl die Syntax unerwartet akzeptiert wurde (keine Ausnahmen), führte sie nicht dazu, dass tatsächlich eine Sortierung durchgeführt wurde.
def sort_view_items(self):
cs = self.settings.case_sensitive
name_lambda = lambda vi: vi.name if cs else vi.name.lower()
if self.settings.sort_by_file_name:
sk = lambda vi: (name_lambda, vi.group, vi.tab)
...
Beachten Sie, dass das Definieren eines "Lambda" und das Zuweisen eines Namens wie diesem den gesamten Zweck von "Lambda" -Funktionen ablehnt und speziell in PEP-8 verwarnt wird. – TigerhawkT3
@ TigerhawkT3 Beziehen Sie sich auf meinen "Lambda in einem Lambda" -Code oder auf das ganze 'sk = Lambda vi: (vi.name wenn cs else vi.name.lower(), vi.group, vi.tab)' code ? – mattst
Es ist ein wenig effizienter, Ihre Schlüsselfunktionen außerhalb von 'sort_view_items' zu definieren. Wenn Sie Funktionen innerhalb einer anderen Funktion definieren, werden diese inneren Funktionen jedes Mal neu kompiliert, wenn Sie die äußere Funktion aufrufen. –