Python3函数之高阶函数、匿名函数

高阶函数

  参数是函数,返回值也是函数

  易于可读性,方便代码维护,隔离作用域

  函数是一等对象

def sort(lst, cmp=None, reverse=False):
    def default_cmp(a, b): # 对函数参数进行设置默认值
        if a > b:
            return 1     # 当没有传入函数参数时
        if a == b:
            return 0
        if a < b:       # 可以使用函数内的函数
            return -1
    if cmp is None: 
        cmp = default_cmp  # 函数是一等对象的一个体现
    dst = []
    for n in lst:
        for i, e in enumerate(dst):
            if not reverse:
                if cmp(n, e) < 0:
                    dst.insert(i, n)
                    break
            else:
                if cmp(n, e) > 0:
                    dst.insert(i, n)
                    break
        else:
            dst.append(n)
    return dst

    闭包的python形式

def make_counter(init):
    counter = [init]  # 直接引用init,返回函数的时候不会保存counter,会出错
    def inc():
        counter[0] += 1 # 所以python2并不是真正意义上的闭包
    def dec():
        counter[0] -= 1
    def get():
        return counter[0]
    def reset():
        counter[0] = init
    return inc, dec, get, reset

  返回的四个函数在上一级作用域make_counter结束的后,仍能使用作用域里的变量

def make_counter(init):
    counter = init
    def inc():
        nonlocal counter  # python3使用nonlocal概念,真正的闭包
        counter += 1
    def dec():
        nonlocal counter # 标识不是本作用域的变量,已经被定义,
        counter -= 1 # 去上一级作用域引用
    def get():
        nonlocal counter # 对于列表,相当于可变参数
        return counter
    def reset():
        nonlocal counter # 只初始化一次
        counter = init
    return inc, dec, get, reset

  偏函数

  固定参数,即固定参数的一种功能,生成单一新函数

from functools import partial
hex_to_int = partial(int, base=16) # 固定int的base关键字参数为16
hex_to_int('0xAAAA')

  柯里化

匿名函数

  lambda params : expr

  没有函数名称,需要通过赋值

  只能写在一行上,表达式的结果就是返回值

  匿名函数递归依赖于最初赋值的变量名,所以最好不要递归

转载于:https://my.oschina.net/charlock/blog/760660

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值