Видимость глобальных переменных в импортируемых модулях

Мы столкнулись с небольшим количеством модулей для импорта в стену в скрипте Python. Я'Я сделаю все возможное, чтобы описать ошибку, почему я столкнулся с ней и почему ясвязывая этот конкретный подход для решения моей проблемы (которую я опишу через секунду):

Позволять'Предположим, у меня есть модуль, в котором ямы определили некоторые служебные функции / классы, которые ссылаются на сущности, определенные в пространстве имен, в которое будет импортирован этот вспомогательный модуль (пусть "a" быть таким лицом):

module1:

def f():
    print a

И тогда у меня есть основная программа, где "а" определяется, в который я хочу импортировать эти утилиты:

import module1
a=3
module1.f()

Выполнение программы вызовет следующую ошибку:

Traceback (most recent call last):
  File "Z:\Python\main.py", line 10, in 
    module1.f()
  File "Z:\Python\module1.py", line 3, in f
    print a
NameError: global name 'a' is not defined

Подобные вопросы были заданы в прошлом (два дня назадэ-э) и было предложено несколько решений, однако я нея не думаю, что они соответствуют моим требованиям.Вот'мой конкретный контекст: я

Я пытаюсь создать программу на Python, которая подключается к серверу базы данных MySQL и отображает / изменяет данные с помощью графического интерфейса. Ради чистоты яМы определили набор вспомогательных / утилитарных функций, связанных с MySQL, в отдельном файле. Однако все они имеют общую переменную, которую я изначально определилвнутри модуль утилит, и который являетсякурсор объект из модуля MySQLdb. Позже я понял, чтокурсор объект (который используется для связи с сервером БД) должен быть определен в основном модуле,так что и основной модуль, и все, что импортировано в него, могут получить доступ к этому объекту.

Конечный результат будет примерно таким:

utilities_module.py:

def utility_1(args):
    code which references a variable named "cur"
def utility_n(args):
    etcetera

И мой основной модуль:

program.py:

import MySQLdb, Tkinter
db=MySQLdb.connect(#blahblah) ; cur=db.cursor()  #cur is defined!
from utilities_module import *

И затем, как только я пытаюсь вызвать любую из служебных функций, она вызывает вышеупомянутое "глобальное имя не определено ошибка.

Особое предложение было иметь "из программы import cur " оператор в файле утилит, такой как этот:

utilities_module.py:

from program import cur
#rest of function definitions

program.py:

import Tkinter, MySQLdb
db=MySQLdb.connect(#blahblah) ; cur=db.cursor()  #cur is defined!
from utilities_module import *

Но это's циклический импорт или что-то в этом роде, и, в итоге, он тоже вылетает. Итак, мой вопрос:

Как, черт возьми, я могу сделать "дворняжка» Объект, определенный в основном модуле, виден тем вспомогательным функциям, которые в него импортированы?

Спасибо за ваше время и мои глубокие извинения, если решение было опубликовано в другом месте. Я просто могуне могу найти ответ сам и яУ меня больше нет трюков в моей книге.

Ответы на вопрос(7)

Ваш ответ на вопрос