美文网首页
Django学习之curry函数。

Django学习之curry函数。

作者: Garfield猫 | 来源:发表于2018-10-24 22:58 被阅读0次

在Django/utils/functional.py文件中,我发现了一个之前从没有见过的函数的写法,源代码如下:

def curry(_curried_func, *args, **kwargs):
    def _curried(*moreargs, **morekwargs):
        return _curried_func(*args, *moreargs, **{**kwargs, **morekwargs})
return _curried

它的工作就是一个decorator的方式.它的主要作用是将原函数预置一些参数,然后返回一个新函数.这样新函数只需要传入原来没有预设的参数.
这样在某些情况下可以简化一些处理.特别是有时为了通用我们定义了一个函数有许多的参数,但调用者却只使用几个参数进行调用,特别多的是在GUI编程中的事件处理方法中.为了在事件处理中使用这个多参数的函数,使用curry可以解决这个问题.

给出一个例子:

from django.utils.functional import curry
def A(a, b, c):
    print(a, b, c)
b = curry(A, 'a', 'b')
b('c')

结果为: a b c

第一个参数是一个函数对象,需要传入的是一个函数,后面要传入的是不定长的tuple和不定长的dict。

不过它使用起来还是有一定的限制,主要是它的参数处理.从上面的源代码可以看到,它对于tuple参数和字典参数是不能混在一起的.特别是对于tuple参数,它是采用追加的方法,因此预设参数时只能是从前向后,中间不能跳跃.比如你想预设上面的a, c参数,但是做不到,其实还是预设了a,b参数.而对于字典参数却没有关系。

相关文章

  • Django学习之curry函数。

    在Django/utils/functional.py文件中,我发现了一个之前从没有见过的函数的写法,源代码如下:...

  • 手写lodash中flowRight,curry,memoize

    手写flowRight 手写curry函数 手写memoize函数

  • 函数柯里化小结

    最近学习了一下高阶函数,其中印象比较深刻的有函数消抖,函数节流以及函数柯里化(curry),在学习中也是从一头雾水...

  • 函数curry化

    前言 最近的某次面试被问到了两次相关的问题,但是自己居然都没答好,尤其第二次,先来看看面试官给的题目是什么样子的:...

  • 手写curry函数

    let curry = (fn, ...args) => {let lens = fn.lengthlet _ar...

  • 函数柯里化

    快速实现纯函数化的工具--柯里化(curry) 1、什么是 Curry: 只传递函数的一部分参数来调用它,让它返回...

  • Django学习笔记----环境搭建基于Windows

    Django学习笔记之环境搭建Django: 1.18Python: 3.6Windows 10 Django安装...

  • [译]JavaScript中的函数柯里化

    原文 Currying in JS 函数柯里化 函数柯里化以Haskell Brooks Curry命名,柯里化是...

  • JavaScript:curry全局函数

    对于柯里化的理解 curry 的概念:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。你可以一次...

  • Javasript函数Curry化

    在一些纯粹的函数是编程语言中。函数并不描述为被调用(called或invoked),而是描述为应用(applied...

网友评论

      本文标题:Django学习之curry函数。

      本文链接:https://www.haomeiwen.com/subject/pneugxtx.html