老实说,我不知道这是好,坏,中立等等。
def foo():
return "foo called"
def bar():
return "BAR CALLED"
def wrap(func):
def _(*args, **kwargs):
try:
func.counter += 1
except:
func.counter = 0
print "The count is %d" % func.counter
return func(*args, **kwargs)
return _
>>> foo = wrap(foo)
>>> bar = wrap(bar)
>>> foo()
'The count is 0'
'foo called'
>>> foo()
'The count is 1'
'foo called'
>>> bar()
'The count is 0'
'BAR CALLED'
到目前为止,这么好 - 功能只是包装,没什么大不了的。以下是我不知道是否考虑某项功能的问题。
>>> foo
<function _ at 0x100499ed8>
>>> _()
The count is 2
'foo called'
>>> bar
<function _ at 0x10049f320>
>>> _()
The count is 1
'BAR CALLED'
>>>
也许我对这里的幕后花絮知之甚少,但是Python在内存中有两个名为_
的包装函数,用户只需键入函数名即可在它们之间“切换”它包裹着。
这是一个功能,如果是,它的主要应用是什么?或者如果不是这样,最好不要忘记这一点,因为试图强调这种行为只是一个坏主意吗?我的熟练的猜测是,这只是可行的,因为Python中没有真正的闭包(可能将它放在We're all adults here
之下,我不应该尝试实际做到这一点),但这是一个没有受过教育的猜测。
答案 0 :(得分:2)
这是Python解释器的快捷方式。评估的最后一个表达式的结果被分配给_
,以便您可以在后续操作中使用它。
像:
>>> 5 + 7
12
>>> _ * 2
24
>>> _ + 3
27
请注意,这仅适用于交互式 shell,而不适用于脚本,并且仅在您尚未定义_
时才有效。