gpt4 book ai didi

python - 提前设置部分lambda函数以避免重复代码

转载 作者:太空狗 更新时间:2023-10-29 18:28:41 27 4
gpt4 key购买 nike

下面的排序方法非常有效。

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 次,这让我的重复代码基因感到厌烦。

出于兴趣,能否以某种方式提前设置大小写方面,但不对 name 属性进行永久更改或在 view_items 的临时副本中进行更改名单?

例如,我尝试在 lambda 中使用 lambda,我认为这行不通,猜猜是什么,它没有。虽然意外地接受了语法(没有异常(exception)),但它并没有导致实际执行任何排序。

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)

...

最佳答案

您需要实际调用 name_lambda:

sk = lambda vi: (name_lambda(vi), vi.group, vi.tab)

在您的代码段中,name_lambda 已正确定义,但永远不会被调用。

关于python - 提前设置部分lambda函数以避免重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38814924/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com