侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

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

2023-12-16 星期六 / 0 评论 / 0 点赞 / 119 阅读 / 3371 字

高阶函数 参数是函数,返回值也是函数 易于可读性,方便代码维护,隔离作用域 函数是一等对象 def sort(lst, cmp=None, reverse=False): def defa

高阶函数

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

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

  函数是一等对象

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 partialhex_to_int = partial(int, base=16) # 固定int的base关键字参数为16hex_to_int('0xAAAA')

  柯里化

匿名函数

  lambda params : expr

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

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

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

广告 广告

评论区