【发布时间】:2020-02-16 11:45:59
【问题描述】:
在下面的例子中:
def speak(volume):
def whisper(text):
print(text.lower() + ('.' * volume))
def yell(text):
print (text.upper() + ('!' * volume))
if volume > 1:
return yell
elif volume <= 1:
return whisper
func = speak(volume=10)
func('hello')
HELLO!!!!!!!!!! # <== obviously `10` is stored in `func` somewhere
鉴于func,我将如何获得“音量”? func 命名空间中是否有东西给出了10 的值?我想也许它会在 func.__globals__ 或 func.__dict__ 但它不在。
【问题讨论】:
-
您可以随时将
volume变量设为全局变量 -
查看stackoverflow.com/a/14414638/2958070 以了解
__closure__属性的用法 -
状态变量可能由于某种原因被隐藏了。也许尝试访问它们不是一个好主意?
标签: python python-3.x closures