Хобрук: Ваш путь к мастерству в программировании

как я могу использовать (глобальные) переменные из main в импортированном модуле

Я хочу создать программу на Python 3, состоящую из основной программы на Python и нескольких модулей, которые я буду импортировать в основную программу. Я хочу использовать переменные, созданные в основной программе, и использовать их в модулях. На данный момент у меня есть это в моей основной программе:

   import sys
   sys.dont_write_bytecode = True
   import importlib

   from tests import blather

   relayrange = 87
   relay = [0] * relayrange

   blather.BLA(relayrange, relay)

На той же карте, что и моя основная функция, у меня есть каталог «тесты», в котором находится файл python blather.py, он содержит этот код

def BLA(relayrange, relay):
print ('this is module BLA')
print (relayrange)
print (relay)

Это работает! Но, как видите, мне нужно было возразить на передачу переменных в функцию, потому что я не нашел другого способа просто использовать переменные из основной программы (которые, как мне сказали, автоматически становятся «глобальными») в модуле BLA.

Итак, мой вопрос: как я могу использовать переменные (глобальные?) из основной части кода Python в импортированном модуле? У меня может быть много десятков переменных в моем основном файле, которые я хочу использовать в своих модулях, поэтому такая передача параметров станет очень громоздкой.

Я пробовал разные тесты с использованием ключевого слова global, но ничего не сработало. Как вы, наверное, заметили, я новичок в Python.

P.S. после того, как меня пометили как дубликат, я, наконец, решил эту проблему, поместив все глобальные переменные в модуль g.pi и импортировав g.pi в каждый модуль, которому нужны глобальные переменные, так что теперь у меня есть три, а не два модуля, а именно main.pi , blather.pi и g.py

main.pi содержит:

import sys
#sys.dont_write_bytecode = True
import importlib

from shared import g
from tests import blather

print(g.relayrange)
print(g.relay)

g.relay[47] = 10
print (g.relay)
g.relay[12] = 999
blather.BLA()

и blather.py содержит:

from shared import g

def BLA():
    print ('in module')
    print (g.relay)

g.py просто содержит переменные, например:

relayrange = 87
relay = [0] * relayrange

  • Как объясняется в одном из ответов на «дублированный вопрос», я бы выбрал новый модуль import module_variables as mv, а затем использовал их как mv.variable_one или что-то в этом роде. Я думаю, вы могли бы также использовать from module_avriables import * 24.12.2015
  • Что ж, после некоторых размышлений и исследований я обнаружил, что могу поместить переменные, которые я хотел сделать глобальными для всех модулей, в другой модуль, который я назвал g.phy, а затем использовал эти глобализованные переменные, импортировав g.py и используя нотацию g.relayrange и g.relay, как в основном модуле, так и в любом импортированном модуле. 24.12.2015

Новые материалы

Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

«Очень простой» эволюционный подход к обучению с подкреплением
В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

ВЫ РЕГРЕСС ЭТО?
Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

LeetCode Проблема 41. Первый пропущенный положительный результат
LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..