当前位置:   article > 正文

这篇博客记录廖雪峰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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

需要注意的是这里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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

返回函数

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

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

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/105515
推荐阅读
相关标签
  

闽ICP备14008679号