我有一个列表,您要从中创建一个排序列表,但我的排序条件是一个引用其他数据结构的相当复杂的表达式。我可以将表达式指定为传递给sorted的“key”参数的lambda,但是这个lambda是丑陋的,我宁愿使用命名函数。复杂的是,除非我将引用的数据结构全局化,否则我找不到从“sorted”调用者传递它们的方法。
有什么建议吗?
答案 0 :(得分:1)
我会使用functools.partial
来绑定" global"的值。您希望用作key
函数参数的上下文的数据结构,为您提供一个可调用的函数,该函数根据sorted
的要求获取单个位置参数:
>>> from functools import partial
>>> def key_func(foo, bar, baz):
print foo, bar, baz
>>> key = partial(key_func, bar=1, baz=2) # bind globals
>>> key(0) # call with each item being sorted
0 1 2