Python functool

1.functools.partial(func*args**keywords)

实现

def partial(func, *args, **keywords):
    def newfunc(*fargs, **fkeywords):
        newkeywords = keywords.copy()
        newkeywords.update(fkeywords)
        return func(*args, *fargs, **newkeywords)
    newfunc.func = func
    newfunc.args = args
    newfunc.keywords = keywords
    return newfunc

例子

>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo.__doc__ = ‘Convert base 2 string to an int.‘
>>> basetwo(‘10010‘)
18

2.functools.update_wrapper(wrapperwrappedassigned=WRAPPER_ASSIGNMENTSupdated=WRAPPER_UPDATES)

将wrapper function更新为wrapped function,多用于decorator,以decorator module中提到的一个例子(用于实现缓存)

def memoize_uw(func):
    func.cache = {}

    def memoize(*args, **kw):
        if kw:  # frozenset is used to ensure hashability
            key = args, frozenset(kw.items())
        else:
            key = args
        if key not in func.cache:
            func.cache[key] = func(*args, **kw)
        return func.cache[key]
    return functools.update_wrapper(memoize, func)

这里memoize就是wrapper function,func就是wrapped function,使用update_wrapper“更新"的内容包括__name____doc____module__, __dict__,

不更新的情况下以上四项与memoize保持一致。

[email protected]functools.wraps(wrappedassigned=WRAPPER_ASSIGNMENTSupdated=WRAPPER_UPDATES)

wraps是update_wrapper的语法糖,从parameter来看就知道少了一个wrapper,于是乎就可以写成

@wraps(func)

def memoize(*args, **kw)

时间: 2024-12-30 11:19:43

Python functool的相关文章

Python decorator module

Python functool Python中的装饰器 def _memoize(func, *args, **kw): if kw: # frozenset is used to ensure hashability key = args, frozenset(kw.items()) else: key = args cache = func.cache # attribute added by memoize if key not in cache: cache[key] = func(*a

python偏函数(functool.partail)

functool.partail 方法可以为一个函数生成偏函数 import functools def f(a,b,c,d): print a,b,c,d a='a' b='b' f1=functools.partial(f,a,b) f1('a','d') 这里函数f有a,b,c,d四个变量,通过functool.partail可以生成偏函数f1,f1运行的代码与f相同,只是相对于f,a,b两个参数是固定的了,每次调用f1时,只需要输入c,d两个参数. 可以以k=v的形式输入参数,可以自定义

PYTHON修饰器的函数式编程

转自:http://coolshell.cn/articles/11265.html Python修饰器的函数式编程 Python的修饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然好像,他们要干的事都很相似--都是想要对一个已有的模块做一些"修饰工作",所谓修饰工作就是想给现有的模块加上一些小装饰(一些小功能,这些小功能可能好多模块都会用到),但又不让这个小装饰(小功能

python functools模块

functools.partial 作用: functools.partial 通过包装手法,允许我们 "重新定义" 函数签名 用一些默认参数包装一个可调用对象,返回结果是可调用对象,并且可以像原始对象一样对待 冻结部分函数位置函数或关键字参数,简化函数,更少更灵活的函数参数调用 #args/keywords 调用partial时参数 def partial(func, *args, **keywords): def newfunc(*fargs, **fkeywords): newk

Python的functools.reduce用法

python 3.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce. reduce的用法 reduce(function, sequence[, initial]) -> value Apply a function of two arguments cumulatively to the items of a sequence,from left to right, so as to reduce the

[python]缓存函数结果进redis

工作中遇到一个问题,就是有一些需要对数据库做全表扫描,而且对结果要求比较宽松的地方,总觉得可以找地方优化,比如暂时保存计算结果. 首先想起来的就是functools.lru_cache,但是可惜在python2.7中没有这个装饰器. 然后就是在stackoverflow找了一个: (来源:https://stackoverflow.com/questions/11815873/memoization-library-for-python-2-7) 1 import time 2 import f

Python 函数装饰器入门

原文链接: --> A guide to Python's function decorators Python功能强劲,语法表现力强,尤其装饰器深深的吸引着我.在设计模式中,装饰器可以在不使用子类的情况下,动态的改变函数,方法以及类的功能.这个功能非常有用,特别在你想扩展函数的功能同时又不想改变原有的函数.的确,我们任意的实现装饰器设计模式,但是,python通过提供简单的语法和特性让装饰器的实现变的如此简单. 在本文中,我将用一组例子来深入浅入python 函数装饰器的功能,所有的例子都是在

Python修饰器

Python的修饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然好像,他们要干的事都很相似——都是想要对一个已有的模块做一些“修饰工作”,所谓修饰工作就是想给现有的模块加上一些小装饰(一些小功能,这些小功能可能好多模块都会用到),但又不让这个小装饰(小功能)侵入到原有的模块中的代码里去.但是OO的Decorator简直就是一场恶梦,不信你就去看看wikipedia上的词条(Deco

Python 中实现装饰器时使用 @functools.wraps 的理由

Python 中使用装饰器对在运行期对函数进行一些外部功能的扩展.但是在使用过程中,由于装饰器的加入导致解释器认为函数本身发生了改变,在某些情况下--比如测试时--会导致一些问题.Python 通过 functool.wraps 为我们解决了这个问题:在编写装饰器时,在实现前加入 @functools.wraps(func) 可以保证装饰器不会对被装饰函数造成影响.比如,在 Flask 中,我们要自己重写 login_required 装饰器,但不想影响被装饰器装饰的方法,则 login_req