版权声明:来自 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)
结果都是相同的。