Skip to main content
 首页 » 编程设计

python之了解 Python 中的闭包作用域

2025年05月04日10del

这是 Bratt Slatkin 书中的例子

def sort_priority(values,   group): 
    def helper(x): 
        if  x   in  group: 
            return  (0, x) 
        return  (1, x) 
    values.sort(key=helper) 

此外,他们还给出了这些值

numbers =   [8, 3,  1,  2,  5,  4,  7,  6] 
group   =   {2, 3,  5,  7} 
sort_priority(numbers,  group) 
print(numbers) 

我们有

[2, 3,  5,  7,  1,  4,  6,  8] 

我不明白这个例子。为什么我们要返回两次,辅助函数实际上做了什么?

请您参考如下方法:

您将函数读作:

def helper(x): 
    if x in group: 
        return (0, x) 
    else: 
        return (1, x) 

或者,更简洁地说,

def helper(x): 
    return (x not in group, x) 

这背后的直觉是sort接受 key在每个元素上调用的回调。对于每个元素,helper被调用返回一个元组(可以是 (0, x) 或 (1, x) 取决于 x 是否存在于 VIP 列表中)。

您应该明白,元组是根据多个谓词进行排序的,这意味着在决定元素的顺序时会考虑元组中的两个项目。这意味着 group 返回的元素 (0, x)与返回的人相比,将首先订购 (1, x)因为0 < 1 .

在此之后,我们有两组,第一个元素为 0 的组和那些第一个元素1 .全部0组元素将排在第一位,但这些元素的顺序取决于元组中的第二项 - x .与 1 类似组元素。


供您输入:

Group0: [2, 3, 5, 7] 
Group1: [8, 1, 4, 6] 
 
Ordering within Group0: [2, 3, 5, 7] 
Ordering within Group1: [1, 4, 6, 8] 
 
Overall ordering: [Group0, Group1] 
 
Result:  [2, 3, 5, 7,    1, 4, 6, 8]