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

第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)

结果都是相同的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值