• 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)
  • 相关阅读:
    面向对象编程(二)封装--构造方法,this关键字,static关键字,方法重载
    面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法
    Python学习4--字符串
    python学习3--元祖
    数据挖掘概念与技术14--Star-Cubing
    Python学习2--列表
    数据挖掘概念与技术13--BUC
    数据挖掘概念与技术12--数据立方体的计算和多路数组聚集详解
    Python学习1--数据类型与循环要点
    数据挖掘概念与技术11--数据仓库的实现
  • 原文地址:https://www.cnblogs.com/rprp789/p/9544843.html
Copyright © 2020-2023  润新知