这篇博客记录廖雪峰python教程的习题(二)

函数式编程

高阶函数—–sorted

首先我们需要明确一点就是sorted()函数是作用于一个列表,对列表中的每一项元素进行排序,因为sorted本身的作用就是对元素排序,如果后面还有key=function ,则是先对列表中的每一项元素按照function进行作用,sorted()函数在对返回的结果(仍然是存在一个list中)在进行排序!理解了上面的逻辑我们就可以做题啦。

“假设我们用一组tuple表示学生名字和成绩:
L = [(‘Bob’, 75), (‘Adam’, 92), (‘Bart’, 66), (‘Lisa’, 88)]
请用sorted()对上述列表分别按名字排序:”

代码如下:

#请用sorted()对上述列表分别按名字排序:
def main():
    L=[('Bob',98),('xuanxuan',90),('hehe',97),['Asas',100]]
    L1=sorted(L,key=sort_byname)
    print(L1)


def sort_byname(t):  #t这里代表着一个元组tuple因为list中每一项不再是单纯的一个元素,而是一个tuple
    return t[0].lower()
    #return t[0]

main()

需要注意的是这里sort_byname()函数的作用对象是sorted()函数中的list的每一项,在这里也就是一个tuple了,由于我们是希望对名字进行排序,sort_byname()函数只需要对一个tuple返回第一个元素值 也就是名字 ,然后sorted()函数会对返回来的值 再进行排序,自然就是按名字排序了

如果是按照分数进行排序呢:

#还是上面那个例子,请用sorted()对上述列表按分数进行排序
def main():
    L=[('Bob',98),('xuanxuan',90),('hehe',97),['Asas',100]]
    L1=sorted(L,key=sort_byscore)
    print(L1)

def sort_byscore(t):
    return t[1]

main()

返回函数

需要注意的是,如果一个函数的返回值仍然是一个函数或者函数的某种形式(比如说列表中的元素都是函数的形式等),那么只有当这个被返回的函数被调用时才会返回值。
现在通过例子说明一下啊:

返回函数,只有被返回的函数被调用时,才会计算里边参数的值

def count():
    fs=[]
    for i in range(1,4):
        def f():
            return i*i
        fs.append(f)
    return fs      

def main():
    f1,f2,f3=count()    #因为count()返回的是一个list 里边的元素都是函数,f1,f2,f3就以此对应了list列表中的三个函数,
    result1=f1()   #只不过这三个函数只有等到自己被调用时f1()时才会返回原本保存在函数中参数的值
    result2=f2()
    result3=f3()  #由于f()函数在定义时使用的时变化的i,因此前两次循环 fs列表中对应的元素--函数保存的并不是原来的1 和2 而是最后被更新到3
    print(result1,result2,result3)

main()

需要说明一下,上面的代码运行之后返回的都是9 。
首先调用count()函数,返回的是fs,一个list 只不过这个list函数存放的元素不是普通的整数或者字符,在这里是函数f,主函数里f1,f2,f3=count() 后就会把三次循环结束的函数依次赋值给 f1,f2,f3,也就是现在他们三个仍是函数,并不是某个具体的值,而且这三个函数里保存着需要返回的参数i ,只有当f1() f2() f3()这样被调用时,才会依次返回值。
而且返回的值都是9并不是期望的1,4,9

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值