【发布时间】:2013-05-24 00:03:42
【问题描述】:
我的问题可以用简单的是或否来回答:
是的,
italic的“闭包风格”是写 python 的更好方式 闭包——换句话说——italic的“闭包符号”不会中断并且 没有任何警告不,
italic的闭包有问题,bold的“闭包符号”是 唯一的出路
以防万一,如果有人想知道“怎么了”,错了为什么“他”不 使用标准的闭包——标准的形式,让我想逃跑。
def example():
# The standard X_x closure...
#
def bold(predecessor):
def successor():
return "<bold/>" + predecessor() + "</bold>"
return successor
# ...this looks sooo much better ^.^
#
def italic(predecessor):
x = predecessor
def successor():
return "<italic/>" + x() + "</italic>"
return successor
def underline(predecessor):
x = predecessor
def successor():
return "<underline/>" + x() + "</underline>"
return successor
@italic
@bold
@underline
def trademark():
return "This trademark cant be changed."
print(trademark())
#example() prints <italic/><bold/><underline/>This trademark cant be changed.</underline></bold</italic>
【问题讨论】:
-
我怀疑上面有一个真正的问题,但我厌倦了阅读你的咆哮并放弃了。你想知道什么,伙计?
-
如果你只关注事实而不被社论cmet所困,你可能会得到更好、更有礼貌的回应。只是说。
-
我不知道为什么你提到的案例不同。除了分配一个多余的临时变量(成本不是很高)之外,它们是相同的。
-
"<italic/>" + x() + "</italic>"是一些看起来很奇怪的 XML... -
更重要的是,
x和predecessor都在italic的本地范围内,因此在为successor生成closure时将被完全相同地对待。不然怎么可能?