Как описать внутри функции модуля глобальную переменную из вызывающего модуля

Вот структура модулей:

главный (main):

from globals_module import *

global global_dict
global_dict = dict.fromkeys(["a1", "a2", "a3", "a4"])

def fun0():
    # global global_dict
    fun1()


fun0()

вызываемый 'globals_module.py':

global global_dict


def fun1():
    # global global_dict

    def fun2():
        # global global_dict
        global_dict["a1"] = 4

    fun2()

При вызове выдает ошибку

Traceback (most recent call last):

  File "D:\AnaPy\examples_code\global_main.py", line 17, in <module>
    fun0()

  File "D:\AnaPy\examples_code\global_main.py", line 14, in fun0
    fun1()

  File "D:\AnaPy\examples_code\globals_module.py", line 17, in fun1
    fun2()

  File "D:\AnaPy\examples_code\globals_module.py", line 15, in fun2
    global_dict["a1"] = 4

NameError: name 'global_dict' is not defined

Я конечно понимаю, что глобальные это плохо. Вызвано тем, что модуль tkinter не позволяет передавать параметры внутрь функций, назначенных на клавиши. вот и закрутилось.

По "физике" - это вызов формы при обработке подменю главного меню.

Проблема в том, что global внутри модуля выводит на уровень этого модуля. А мне надо бы еще выше. Что посоветуете?

А то я уже готов в базу писать эти переменные и читать оттуда.... Ну или держать весь код в одном модуле...

Я вроде все 32 варианта включения/выключения global перепробовал - ни один не сработал ))


Ответы (1 шт):

Автор решения: AndreyM

Не знаю, подойдет ли такой вариант именно в вашей ситуации, но можно так попробовать изменить файл global_module

def fun1():
    fun1.global_dict = {}
    
    def fun2():
        fun1.global_dict["a1"] = 4
    fun2()
→ Ссылка