Следующий метод сортировки отлично работает.
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)
Однако чувствительный к регистру раздел lambdas vi.name if cs else vi.name.lower()
используется 3 раза, что раздражает мой повторяющийся кодовый ген.
Из интереса, может ли случайный аспект быть заранее установлен каким-либо образом, но без внесения permenant изменений в атрибут name
или сделать это во временной копии списка view_items
?
Например, я попытался использовать лямбда в лямбда, который, как я думал, не сработает, и, угадайте, что это не так. Хотя неожиданно синтаксис был принят (без исключений), он просто не привел к тому, что фактически была выполнена какая-либо сортировка.
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)
...