• Python学习笔记6 函数式编程_20170619


    廖雪峰python3学习笔记:

    # 高阶函数

    • 将函数作为参数传入,这样的函数就是高阶函数(有点像C++的函数指针)
    def add(x, y):
        return x+y
     
    def mins(x, y):
        return x-y
    
    # 高阶函数
    def computex, y, f):
        return f(x) + f(y)
    >>> computex(1,2,add)
    3
    
    >>> compute(4, 1, mins)
    3
    
    f = add
    >>>f(1,2)
    3

    # map()  是一种高阶函数。第二个list参数内的元素都执行 f 操作

    def f(x):
        return x*x
    
    >>>map(f, [1,2,3,4,5])
    [1,4,9,16,25]

    # reduce  也是一种高阶函数。不好描述,看代码说明

    reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

    # filter 高阶函数。过滤。第一个参数是true,保留。

    def is_odd(n):
        return n % 2 == 1
    
    list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))

    # sort 排序

    >>>sorted([1,5,2,6,0])
    [0,1,2,5,6]
    
    >>>sorted([1,5,2,6,0], reverse = True)
    [6, 5, 2, 1, 0]
    
    >>>sorted(['bob', 'about', 'Zoo', 'Credit'])
    ['Credit', 'Zoo', 'about', 'bob']
    
    >>>sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
    ['about', 'bob', 'Credit', 'Zoo']

    # 函数作为函数的返回值

    def lazy_sum(*args):
        def sum():
            ax = 0
            for n in args:
                ax = ax + n
            return ax
        return sum
    
    >>>f = lazy_sum(1, 3, 5, 7, 9)
    # 不会被执行,lazy_sum 的函数实现和局部变量都保存在f中。
    
    >>>f() # 才会执行
    25
    • 闭包  相关的参数和变量(外部的)都包含在返回的函数(内部的)中的情况称为“闭包”。注意局部变量的值
    # 廖雪峰的例子
    def count():
        fs = []
        for i in range(1, 4):
            def f():
                 return i*i
            fs.append(f)
        return fs
    
    f1, f2, f3 = count()
    
    # 调用
    >>> f1()
    9
    >>> f2()
    9
    >>> f3()
    9
    # 因为f1f2f3中的局部变量都是i,但是当f3生成后,i的值是3

      返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。(廖雪峰)

    # 匿名函数  lambda表达式

    >>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
    [1, 4, 9, 16, 25, 36, 49, 64, 81]
    
    # lambda 输入参数x : 函数体x*x
    >>> f = lambda x: x * x # 没有函数冲突问题
    >>> f
    <function <lambda> at 0x101c6ef28>
    >>> f(5)
    25

    # 装饰器 (还不大理解其存在的意义)

    在不修改函数的前提上,增加函数的功能。

    # 来自廖雪峰的代码
    def log(func):
        def wrapper(*args, **kw):
            print('call %s():' % func.__name__) # 函数的名字属性
            return func(*args, **kw)
        return wrapper
    
    @log         # @ 语法 相当于 now = log(now)
    def now():
        print('2015-3-25')
    
    # 调用
    >>> now()
    call now():
    2015-3-25
                

    # 偏函数(把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数)

    # 数值转化
    >>> int('12345', base=8) # 将字符串当做8进制数
    5349
    >>> int('12345', 16) # 16 进制
    74565
    
    # 偏函数
    import functools
    int2 = functools.partial(int, base=2) # 偏函数,固定参数为二进制转化。
    
    # 调用
    >>> int2('12345')
    5349
  • 相关阅读:
    使用阿里云ECS安装HDFS的小问题
    退役回忆录嘤嘤嘤
    2018 ICPC北京 H ac自动机
    Educational Codeforces Round 54 (Rated for Div. 2) DE
    sa learning
    网络流learning
    Python模块logging
    Python模块unittest
    Linux /dev/shm
    Shell 字符串操作
  • 原文地址:https://www.cnblogs.com/alexYuin/p/7050702.html
Copyright © 2020-2023  润新知