可以使用lambda而不是方法,作为sorted()中的键吗?

时间:2016-09-22 11:30:42

标签: python python-3.x lambda

这是我第一次提问。我甚至没有问过你已经得到了很多帮助。 (感恩的脸)。 所以,几个星期前我在这里找到了这段有用的代码。

import re

def yearly_sort(value):
    numbers = re.compile(r'(\d+)')
    parts = numbers.split(value)
    parts[1::2] = map(int, parts[1::2])
    return parts

在这里完美运作:

def get_files_sorted(path_to_dir):
   file_names = []
   for root, dirs, files in os.walk(path_to_dir):
      for file_name in sorted(files, key=yearly_sort):
         file_names.append(os.path.join(root, file_name))
   return file_names

现在,我遇到了描述上述功能的问题(正如您已经从非描述性方法名称中看到的那样)。

上述方法的名称应该是什么(而不是some_sort())?

这个方法可以在lambda中以某种方式被挤压,以便sorted()中的可以绑定到key = lambda?

2 个答案:

答案 0 :(得分:2)

绝对可以lambda功能。例如,查看question

但是如果你有复杂的功能,你就不应该把它移到lambda,因为可读性会大大降低。

所以这里是Zen of Python

  

复杂比复杂更好。

答案 1 :(得分:0)

如果numbers = re.compile(r'(\d+)') for file_name in sorted(files, key=lambda value : [int(x) if x.isdigit() else 0 for x in numbers.split(value)][1::2]): 先前已编译(可提高性能),您可以将其压缩为lambda

{{1}}

在这种情况下,我们对项目#0和#3进行不必要的测试。也许它会更好,但这是复杂的lambdas的风险:性能和&可能性会受到影响。