Я пытаюсь импортировать модуль, проходя некоторые глобальные переменные, но это не похоже на работу:Python __import__ параметр спутанность
test_1 Файл:
test_2 = __import__("test_2", {"testvar": 1})
test_2 Файл:
print testvar
Это кажется, что он должен работать, и напечатать 1, но я получаю следующее сообщение об ошибке, когда я бегу test_1:
Traceback (most recent call last):
File ".../test_1.py", line 1, in <module>
print testvar
NameError: name 'testvar' is not defined
Что я делаю неправильно?
EDIT:
Как я заметил позже, это попытка заменить функции в библиотеке графики. Вот пример программа (что мой учитель написал) с помощью этой библиотеки:
from graphics import *
makeGraphicsWindow(800, 600)
############################################################
# this function is called once to initialize your new world
def startWorld(world):
world.ballX = 50
world.ballY = 300
return world
############################################################
# this function is called every frame to update your world
def updateWorld(world):
world.ballX = world.ballX + 3
return world
############################################################
# this function is called every frame to draw your world
def drawWorld(world):
fillCircle(world.ballX, world.ballY, 50, "red")
############################################################
runGraphics(startWorld, updateWorld, drawWorld)
Обратите внимание, что этот код разработан таким образом, чтобы люди, которые никогда (или почти никогда) видели какую-либо коду до (а не только питона) будет способный понять с минимальными усилиями.
Пример для перезаписи функции:
Оригинальный код:
def drawPoint(x, y, color=GLI.foreground):
GLI.screen.set_at((int(x),int(y)), lookupColor(color))
Введенный код:
# Where self is a window (class I created) instance.
def drawPoint(x, y, color = self.foreground):
self.surface.set_at((int(x), int(y)), lookupColor(color))
Я думаю, мой вопрос: как бы я впрыснуть глобальные функции/переменные в импортированный модуль перед запуском модуля ...?
Является ли библиотека, запускающая код инициализации сразу после ее импорта, или вам нужно запустить makeGraphicsWindow(), прежде чем что-либо сделать? – computergeek6
Он запускает некоторый код инициализации сразу после его импорта и запускает еще несколько при вызове makeGraphicsWindow. – skeggse
Итак, вы намерены превратить код в своего учителя, который экзогенно изменяет свой модуль, для которого вы «не можете изменить код в модуле, который я импортирую»? Я думаю, возможно, что она будет впечатлена, но я предполагаю, что это не самый вероятный ответ. – msw