zoukankan      html  css  js  c++  java
  • chapter5.1高阶函数

    高阶函数

      函数在Python中是一等公民

      函数也是对象,可调用对象

      函数可以做为普通变量、参数、返回值等

    数学概念y = g(f(x))

    在数学和计算机科学中,高阶函数要满足至少一个以下的条件

      接收一个或多个函数

      输出一个函数,最多一个,不能多

    def counter(base):
        def inc(step = 1):
            nonlocal base
            base += step
            return base
        return inc
    s1 = counter(5)
    s2 = counter(5)

    比较两个函数,比不了大小,就比地址,

    == 判断内容是否相同,没有比地址,is判断地址是否相同

    def sort(iterable,reverse=False):
        a = [] 
        for x in iterable:
            for i,y in enumerate(a):
                flag = x>y if reverse else x<y
                if flag:
                    a.insert(i, x)
                    break
            else:
                a.append(x)
        
        return a
    sort([1,2])

    插入实现用一个参数控制

    def sort(iterable,reverse=False,key=lambda a,b: a>b):
        a = [] 
        for x in iterable:
            for i,y in enumerate(a):
                flag = key(x,y) if reverse else not key(x,y)
                if flag:
                    a.insert(i, x)
                    break
            else:
                a.append(x)
        
        return a
    sort([1,2])

    参数用函数,是高阶函数,忽略算法效率问题

    enumerte

    str.lower('A')  调用类方法,理解为函数,操作对象为’A‘

    'A'.lower()  ’A‘对象对自己调用方法把自己转化   对象.操作

    内建函数,高阶函数

    sorted(iterable, /, *, key=None, reverse=False)

      sorted 中 key只是比较方式,不会影响原数据,reverse表示是否反转排序

    sorted(range(5),key=lambda x: 6-x)
    output : [4, 3, 2, 1, 0]

      立即返回新列表

    filter(function,iterable)   过滤可迭代对象的元素,返回一个迭代器

    function 一个一个的计算,操作具有一个参数的函数,返回bool,      返回True时的实参

    list(filter(lambda x:x-1, range(5)))
    output : [0, 2, 3, 4]

    x-1,当x = 1 时,得0,等效False,过滤掉1

    map(func, *iterables)  对多个可迭代对象的元素按照指定的函数进行映射,返回一个迭代器

    传入传出个数不变

    list(map(lambda x:2*x+1 ,range(5)))
    output : [1, 3, 5, 7, 9]

    map函数返回一个迭代器,要用容器接收

    dict(map(lambda x:(x%5,x), range(400)))
    output : {0: 395, 1: 396, 2: 397, 3: 398, 4: 399}

    注意字典集合去重的问题

    函数返回值一定为1个

    构造对象,解析式 都可以封装或者创建容器

    柯里化 currying

    指的是将原来接收两个参数的函数变成新的接收一个参数的函数的过程。新函数返回一个以原有第二个参数为参数的函数

    z = f(x, y) 转换为z = f(x)(y)

    通过嵌套函数可以把函数转化成柯里化函数
    函数块右移,参数下拉,新建函数,再调用原函数

    def add(x,y):
        return x+y
    add(4,5)
    def add(x): def fn(y): return x+y return fn add(4)(5)
  • 相关阅读:
    Codevs 4189 字典(字典树Trie)
    Codevs 1697 ⑨要写信
    Codevs 1904 最小路径覆盖问题
    特殊性
    继承
    分组选择符
    伪类选择符
    包含(后代)选择器
    子选择器
    类和ID选择器的区别
  • 原文地址:https://www.cnblogs.com/rprp789/p/9544843.html
Copyright © 2011-2022 走看看