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

问题描述 投票:0回答:3

我在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)
python function syntax
3个回答
72
投票

为什么要在函数中定义函数?

保持隔离。只用在这一个地方。为什么在本地使用时还要更全局地定义它?


8
投票

这只是将大函数分解为小块的另一种方法,而不用另一个函数名称污染全局命名空间。通常,内部函数不是独立的,因此不正确地属于全局命名空间。


7
投票

此类代码的主要原因通常是函数闭包。它是一个强大的东西,不仅适用于Python。例如。 JavaScript 从他们那里受益匪浅。

关于 Python 中闭包的一些要点 - closures-in-python

© www.soinside.com 2019 - 2024. All rights reserved.