Это , а не , как nonlocal
работает.Он не обеспечивает динамическую область видимости (это просто огромная PITA, ожидающая своего появления, и даже более редко полезная, чем ваша обычная «злая» функция).Это просто исправляет лексическую область видимости.
В любом случае, вы не можете делать то, что имеете в виду (и я бы сказал, что это хорошо).Нет даже грязного, но легкого хака (и пока мы на нем: такие хаки не обескураживают, потому что они обычно работают немного хуже!).Просто забудьте об этом и правильно решите реальную проблему (вы не назвали ее, поэтому мы ничего не можем сказать по этому поводу).
Самое близкое, что вы можете получить, - это определить какой-то объект, который несет в себе все, что вы хотитеподелиться и передать это явно (например, сделать класс и использовать self
, как предложено в другом ответе).Но это относительно громоздко, чтобы делать везде, и все же хакерские (хотя и лучше, чем динамическая область видимости, потому что «явный лучше, чем неявный»).