当前位置:  开发笔记 > 编程语言 > 正文

编写python闭包的更好方法是什么?

如何解决《编写python闭包的更好方法是什么?》经验,为你挑选了1个好方法。



1> Eric..:

当然,你可以这样做:

def italic(predecessor):
    x = predecessor
    def successor():
        return "" + x() + ""
    return successor

就像你能做的那样:

def italic(predecessor):
    x = predecessor
    x2 = x
    def successor():
        return "" + x2() + ""
    return successor

要么

def italic(predecessor):
    x = predecessor
    x2 = x
    x3 = x2
    def successor():
        return "" + x3() + ""
    return successor

但你为什么要这样做?


编写装饰器的最佳方法是functools.wraps:

from functools import wraps

def italic(f):
    @wraps(f)
    def decorated():
        return "" + f() + ""
    return decorated

但如果你真的想要与众不同:

import functools

def italic(f):
    return functools.update_wrapper(lambda: "" + f() + "", f)


@StevenRumbalski什么?不是.现在,通过非常大或无限数量的连接来累积字符串会产生性能问题,应该避免,但是`+`是**连接字符串的惯用方法.
可以说,这可以通过使用`str.format()`来减少麻烦,但是,是的,加上像这样的几个字符串的`+`是合法的.
@StevenRumbalski:所以使用`+`构建字符串并不是真正的反模式(我认为这与Lattyware解释不相关),但使用字符串构建HTML是一个坏主意(我同意)?
推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有