栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python避免使用lambda作为需要两个可调用对象的键(函数组合)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python避免使用lambda作为需要两个可调用对象的键(函数组合)

如果有一个

compose
功能的话-
也许在里面会很可爱
functools
。没有,我也不指望会有,唉。用Raymond
Hettinger的话来说,

先前已在其他论坛中进行了讨论和拒绝。问题之一是通常的数学顺序是不直观的,并且不能自我证明-即

compose(f,g)

f(g(x))
g(f(x))
?相同。此外,它已经是污垢容易创建自己构建功能,或者直接做组成:
h = lambda x:f(g(x))

这里有两个简单的实现方式的

compose
一个可调用的类,可能对你有用,但:

# Scott Daniels, http://pre.activestate.com/recipes/52902-function-composition/# Lightly edited for style.class Compose(object):    '''Compose functions. compose(f,g,x...)(y...) = f(g(y...),x...))'''    def __init__(self, f, g, *args, **kwargs):        self.f = f        self.g = g        self.pending = args[:]        self.kwargs = kwargs.copy()    def __call__(self, *args, **kwargs):        return self.f(self.g(*args, **kwargs), *self.pending, **self.kwargs)class Starcompose:    '''Compose functions. Starcompose(f,g,x...)(y...) = f(*g(y...),x...))'''    TupleType = type(())    def __init__(self, f, g, *args, **kwargs):        self.f = f        self.g = g        self.pending = args[:]        self.kwargs = kwargs.copy()    def __call__(self, *args, **kwargs):        mid = self.g(*args, **kwargs)        if isinstance(mid, self.TupleType): return self.f(*(mid + self.pending), **self.kwargs)        return self.f(mid, *self.pending, **self.kwargs)

另外,请参阅该

functional
软件包,它启发
compose_many
了我的这个非常简单的功能:

def compose(f1, f2):    def composition(*args, **kwargs):        return f1(f2(*args, **kwargs))    return compositiondef compose_many(*funcs):    return reduce(compose, funcs)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516771.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号