码迷,mamicode.com
首页 > 其他好文 > 详细

高阶函数

时间:2018-03-29 20:05:24      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:new   int   break   list   ever   def   counter   ted   多个   

--------------以下部分摘自马哥教育

函数的一般形式:

  y= f(x)

x成为自变量,y是x的函数 (域值)

高阶函数:

  y=f(g(x))

定义:

  接受一个或者多个函数作为参数

  返回一个函数

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

    return inc


foo = counter(5)
print(foo())
f1 = counter(5)
f2 = counter(5)
print(id(f1), id(f2), id(foo))

因为上面例子中,返回的是一个函数,即可以看成返回的是一个对象,所以在调用时,尽管参数值一样,但是,不同的调用产生了不同的对象,存放的地址是不一样的。

高阶函数的用途:

  函数作为返回值,往往会形成闭包;

  函数作为参数,应用很广泛。

排序问题举例:

lst = [2, 4, 6, 8, 4, 6, 3, 2, 4, 5]


def sort(lis, fn=lambda a, b: a < b):
    def compare(a, b):
        return a < b if asc else a > b

    newlst = []
    for x in lst:
        for i, y in enumerate(newlst):

            if fn(x, y):
                newlst.insert(i, x)
                break
        else:
            newlst.append(x)

    return newlst


print(sort(lst))
print(sort(lst, lambda x, y: x < y))
print(sorted(lst, reverse=True))  # sorted 排序函数
print(list(map(lambda x: (x, x + 1), lst)))  # map 映射函数
print(list(filter(lambda x: x > 3, lst)))  # filter 过滤函数

上面例子中我们把逻辑抽象成一个函数,然后有外部作为参数传入,大大增加编程的灵活性。

 

高阶函数

标签:new   int   break   list   ever   def   counter   ted   多个   

原文地址:https://www.cnblogs.com/jameskane/p/8671810.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!