在 Python 中在函数内定义函数有什么好处?
我在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
为什么要在一个函数里面定义另一个函数呢?
这样做是为了让它保持独立。这个内部函数只在这个特定的地方用到。既然它只在这里用,为什么要把它定义得那么广泛呢?