Как получить доступ к закрытым переменным, учитывая только функцию закрытия?

В следующем примере:

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__, но ни в одном.

Ответы

Ответ 1

Ниже (код ниже возвращает 10)

func.__closure__[0].cell_contents