关于Effective Python(Brett Slatkin著)的一些见解

版权声明:来自 https://blog.csdn.net/Leesoar521yt/article/details/81564633
第15条:了解如何在闭包里使用外围作用域中的变量

首先作者抛了一个问题:

假如有一份列表,其中的元素都是数字,现在要对其排序,但排序时,要把出现在某个群组内的数字,放在群组外的那些数字之前。
代码如下:

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)

来说说我对这段代码的理解吧,在helper()中,return 返回一个元组给sort()中的key,return(0, x)与return(1, x)其实是sort中的一个小机制,会在内部将一个可迭代对象分为两组,比如上面分为0和1,那么会将0和1中的数据分别排序,然后编号小的在前,编号大的在后

也就是说,你写成下面这样返回的也是一样:

def helper(x):
    if x in group:
        return (1000, x)
    return (2000, x)

或者这样:

def helper(x):
    if x in group:
        return (False, x)
    return (True, x)

结果都是相同的。

猜你喜欢

转载自blog.csdn.net/Leesoar521yt/article/details/81564633