zoukankan      html  css  js  c++  java
  • python中高阶函数学习笔记

    什么是高阶函数


    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数

     def fun(x, y, f):
        print f(x), f(y)
    
     fun(1, -2, abs)
     结果:
     1 2

    内置高阶函数


    map函数

    map( ) 函数接收两个参数,一个是函数,一个是序列, map 将传入的函数依次作用到序列的每个元素,并把结果作为新的 list 返回

     def fun(x):
         return x * x
    
     print map(fun, range(5))
     结果:
     [0, 1, 4, 9, 16]
    
    
    print map(str, [1, 2, 3])
     结果:
     ['1', '2', '3']

    reduce函数

    reduce把一个函数作用在一个序列[x1, x2, x3…]上,这个函数必须接收两个参数,reduce 把结果继续和序列的下一个元素做累积计算

    def add(x, y):
         return x + y
    
    print reduce(add, range(5))
     结果:
     10

    其实其运行过程为:add(add(add(add(0+1)+2)+3)+4)=10

    filter函数

    filter( ) 也接收一个函数和一个序列。和 map( ) 不同的是,filter( ) 把传入的函数依次作用于每个元素,然后根据返回值是 True还是 False 决定保留还是丢弃该元素

    在一个 list 中,删掉偶数,只保留奇数:

    def fun(n):
         return n % 2 == 1
    
    print filter(fun,range(5))
     结果:
     [1, 3]

    sorted函数

    • 排序也是在程序中经常用到的算法。 无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。通常规定如下:

     x < y, return -1
     x == y, return 0
     x > y, return 1
    
     print sorted([3, 1, 2])
     print sorted([3, 1, 2], reverse=True)
     结果:
     [1, 2, 3]
     [3, 2, 1] 

    排序数字字符

    li = ['2', '1', '4', '3']
    print sorted(li, key=int)
    结果:
    [
    '1', '2', '3', '4']

    匿名函数

    •当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。 
    •关键字 lambda 表示匿名函数,冒号前面的 x 表示函数参数

     print map(lambda x: x * x, [1, 2, 3, 4])
    
     def fun(x):
         return x * x
    
     print map(fun, [1, 2, 3, 4])
     结果:
     [1, 4, 9, 16]
     [1, 4, 9, 16]

    • 匿名函数有只能有一个表达式,不用写 return ,返回值就是该表达式的结果。 
    • 因为匿名函数没有名字,不必担心函数名冲突。 此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数;

     f = lambda x: x * x
     print f
     print f(3)
     结果:
     <function <lambda> at 0x7fde80eb7938>
     9

    •把匿名函数作为返回值返回

     def fun(x, y):
         return lambda: x * x + y * y
    
     print fun(1, 2)
     f = fun(1, 2)
     print f()
     结果:
     <function <lambda> at 0x7f5c2942a9b0>
     5

    传入多个参数:

     f = lambda x,y =1,*args,**kwargs :(x*y,args,kwargs)
     print f(2,4,5,a=1,b=5)
     结果:
     (8, (5,), {'a': 1, 'b': 5})
  • 相关阅读:
    WPF and Silverlight 学习笔记:键盘输入、鼠标输入、焦点处理
    [转]Visual Studio .NET "目标平台" 说明
    WPF 使用HwndHost嵌入Win32后,无法接受Mouse_Move\Mouse_Leave消息
    c#有多少种可能导致写文件失败?
    优化性能:文本【msdn】
    解决popup不随着window一起移动的问题
    异常处理的资料
    利用bat编译WPF项目
    属性值继承
    WPF消息机制
  • 原文地址:https://www.cnblogs.com/fireporsche/p/9294824.html
Copyright © 2011-2022 走看看