Форум сайта python.su
Есть ОСНОВНОЙ_МОДУЛЬ.
В нем определна ФУНКЦИЯ
ОСНОВНОЙ_МОДУЛЬ импортирует ДРУГОЙ_МОДУЛЬ при помощи
from ДРУГОЙ_МОДУЛЬ import ДРУГАЯ_ФУНКЦИЯ
def ДРУГАЯ_ФУНКЦИЯ()
ФУНКЦИЯ()
NameError: global name 'ФУНКЦИЯ' is not defined
Отредактировано andrei186 (Фев. 7, 2016 23:58:54)
Офлайн
Вы прям так код и пишите?
Офлайн
4kpt_IVпрям так это как? Если в смысле кириллицы, то нет
Вы прям так код и пишите?
Офлайн
from ДРУГОЙ_МОДУЛЬ import ДРУГАЯ_ФУНКЦИЯ, ФУНКЦИЯ
Офлайн
kampellaФУНКЦИЯ опредлена в ОСНОВНОМ_МОДУЛЕ
from ДРУГОЙ_МОДУЛЬ import ДРУГАЯ_ФУНКЦИЯ, ФУНКЦИЯ
Офлайн
А с какого перепугу оно должно работать. Если ты не понимаешь как работает импорт, то тебе нужно читать книгу, там должно быть про это написано.
Офлайн
aybА можно чуть подробнее, почему именно не должно работать?
А с какого перепугу оно должно работать. Если ты не понимаешь как работает импорт, то тебе нужно читать книгу, там должно быть про это написано.
Отредактировано andrei186 (Фев. 8, 2016 09:09:15)
Офлайн
andrei186
Вы импортируете ФУНКЦИЮ, ничего кроме ФУНКЦИИ вы не импортируете и поэтому не получите. Нужна другая функция -импортируйте её отдельно. Так устроен импорт в питоне.
Офлайн
FishHookранее мне сказали, что конструкция from…import f2 импортирует функцию f2(), но при этом еще и выполняет весь код, прописанный в импортируемом модуле.
Вы импортируете ФУНКЦИЮ, ничего кроме ФУНКЦИИ вы не импортируете и поэтому не получите.
#importING_module.py
from importED_module import f2
def f1():
какой-то код
#importED_module.py
def f2():
f1()
f2()
#importING_module.py
def f2()
f1()
f2()
def f1()
какой-то код
FishHookКакая другая функция, что она должна делать и в каком модуле определена?
Нужна другая функция -импортируйте её отдельно.
Отредактировано andrei186 (Фев. 8, 2016 11:19:41)
Офлайн
> Почему этот вызов возвращает…и как это победить?
Это особенность устройства функций. У каждой функции есть ссылка на глобальное пространство имён в котором она определена и функция использует только это пространство, а не тот контекст из которого её вызывают.
Вот как это можно победить (хреновый способ):
#p2.py def foo2(): foo()
#p1.py from p2 import foo2 def foo(): print "be-be-be" foo2.func_globals.update({"foo":foo}) foo2()
#p2.py def foo2(): foo2.foo()
#p1.py from p2 import foo2 def foo(): print "be-be-be" foo2.func_dict.update({"foo":foo}) foo2()
Отредактировано Rodegast (Фев. 8, 2016 11:33:46)
Офлайн