Создание дорогостоящего массива Python глобальным - PullRequest
0 голосов
/ 23 марта 2019

Я хочу избежать повторного вычисления дорогостоящего массива в Python.К счастью, он неизменен - ​​так что «копирования указателя» будет достаточно.К сожалению, программа разделена на множество модулей, и мне это нужно тут и там, и переменные в Python являются не более чем глобальными модулями.Как мне «импортировать» массив в другой модуль после его однократного вычисления (например, в основном)?

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

(извините, у меня нет никакого полезного кода)

Ну, фактический результат заключается в том, чтопрограмма - улитка, и выполнение 1000000 прогонов для получения значимой статистики не может быть и речи ...

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Если вы поместите вычисление bigArray в модуль bigArray.py, вы сможете использовать его в любом другом модуле, импортировав его специально:

from bigArray import bigArray

Если вы хотите, чтобы массив вычислялся только при первом обращении к нему, ваш модуль bigArray.py может предоставить его с помощью функции.

# bigArray.py
#
bigArray = None
def getBigArray():
    if bigArray is None:
       ... build the bigArray ...
    return bigArray

# otherModule.py
#
from bigArray import getBigArray

   ...
   arr = getBigArray()  # to use the array
   ...
0 голосов
/ 23 марта 2019

Если мое понимание верно (не стесняйтесь исправлять меня иначе), то если что-то является глобальной переменной, скажем, workspace.py, и у меня есть другая программа project.py Я могу запустить from workspace import *, чтобы получить то же пространство имен глобальной переменной как мой workspace.py файл. Это, как правило, осуждается, потому что вы можете невольно повторно использовать одно и то же имя переменной, не осознавая этого, тем самым нарушая вашу программу. Он также (без необходимости в большинстве случаев) загружает все переменные в оперативную память, по существу делая project.py просто расширением вашего исходного workspace.py с доступом к тем же классам, методам и переменным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...