在 Python 中在函数内定义函数有什么好处?

36 投票
3 回答
38556 浏览
提问于 2025-04-16 22:04

我在effbot上看到了一段Python代码(见下方),我想知道:

为什么要在一个函数里面再定义一个函数呢?

import re, htmlentitydefs

##
# Removes HTML or XML character references and entities from a text string.
#
# @param text The HTML (or XML) source text.
# @return The plain text, as a Unicode string, if necessary.

def unescape(text):
    def fixup(m):
        text = m.group(0)
        if text[:2] == "&#":
            # character reference
            try:
                if text[:3] == "&#x":
                    return unichr(int(text[3:-1], 16))
                else:
                    return unichr(int(text[2:-1]))
            except ValueError:
                pass
        else:
            # named entity
            try:
                text = unichr(htmlentitydefs.name2codepoint[text[1:-1]])
            except KeyError:
                pass
        return text # leave as is
    return re.sub("(?s)<[^>]*>|&#?\w+;", fixup, text)

3 个回答

7

这种代码的主要原因通常是因为有一个叫做闭包的东西。闭包是个很强大的概念,不仅仅适用于Python,像JavaScript也从中受益匪浅。

关于Python中的闭包,有一些要点可以了解 - Python中的闭包

8

这其实就是把一个大函数拆分成几个小部分的另一种方法,这样就不会在全局命名空间里增加新的函数名。很多时候,里面的小函数并不是独立的,所以它其实不应该放在全局命名空间里。

72

为什么要在一个函数里面定义另一个函数呢?

这样做是为了让它保持独立。这个内部函数只在这个特定的地方用到。既然它只在这里用,为什么要把它定义得那么广泛呢?

撰写回答