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

Python中的函数链接

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

Python中的函数链接

我不知道 函数 链接和 可调用 链接是否一样多,但是,由于函数 可调用的,所以我猜没有什么坏处。无论哪种方式,我都可以通过两种方式来考虑:

子类化
int
和定义
__call__

第一种方法是使用一个定义了

int
子类的自定义子类,
__call__
该子类返回具有更新后值的自身新实例:

class CustomInt(int):    def __call__(self, v):        return CustomInt(self + v)

add
现在可以定义函数以返回
CustomInt
实例,该实例作为可返回自身的更新值的可调用对象,可以依次调用:

>>> def add(v):...    return CustomInt(v)>>> add(1)1>>> add(1)(2)3>>> add(1)(2)(3)(44)  # and so on..50

另外,作为

int
子类,返回值保留的
__repr__
__str__
行为
int
但是,对于更复杂的操作,应适当定义其他标记

正如@Caridorc在评论中指出的,

add
也可以简单地写成:

add = CustomInt

将类重命名为

add
代替
CustomInt
也可以类似地工作。


定义一个闭包,需要额外的调用来产生值:

我能想到的唯一其他方法涉及一个嵌套函数,该函数需要一个额外的空参数调用才能返回结果。我 没有
使用

nonlocal
并选择将属性附加到函数对象,以使其在Python之间可移植:

def add(v):    def _inner_adder(val=None):          """         if val is None we return _inner_adder.v         else we increment and return ourselves        """        if val is None:     return _inner_adder.v        _inner_adder.v += val        return _inner_adder    _inner_adder.v = v  # save value    return _inner_adder

这将连续返回自身(

_inner_adder
),如果
val
提供了a,则将其递增(
_inner_adder +=val
),否则,将按原样返回值。就像我提到的,它需要额外的
()
调用才能返回增加的值:

>>> add(1)(2)()3>>> add(1)(2)(3)()  # and so on..6


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

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

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