Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 8, 2008 14:11:52

Witt
От:
Зарегистрирован: 2008-12-08
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

пространства имен

как из загружаемого модуля получить доступ к функции, определенной в загружающем модуле?

при запуске файла module1 выводит:
NameError: global name ‘function1’ is not defined

знаю только что execfile('module2.py') поможет.
есть ли более человеческий способ? (не ломая структуру имен module2.function2)

module1.py:
def function1():
print 'blabla'

import module2
module2.function2()

module2.py:
def function2():
function1()



Отредактировано (Дек. 8, 2008 14:29:56)

Офлайн

#2 Дек. 8, 2008 15:30:27

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

пространства имен

Цикличные импорты можно побороть только пересторив оба модуля так, что бы их не было.

Офлайн

#3 Дек. 8, 2008 15:35:47

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

пространства имен

Ferroman
Цикличные импорты можно побороть только пересторив оба модуля так, что бы их не было.
В принципе можно сделать и цикличный вызов, но сие не есть гуд.



Офлайн

#4 Дек. 8, 2008 15:45:29

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

пространства имен

Должен существовать один — и, желательно, только один — очевидный способ сделать это. (с) Великодушный Диктатор.

Офлайн

#5 Дек. 8, 2008 16:33:55

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

пространства имен

Или я не понял в чем дело или так:

module2.py:
def function2():
from module1 import function1
function1()
..bw



Офлайн

#6 Дек. 8, 2008 16:43:37

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

пространства имен

zope.deferredimport допоможе



Офлайн

#7 Дек. 8, 2008 16:54:00

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

пространства имен

Тут есть неплохая статья по этому поводу: http://effbot.org/zone/import-confusion.htm

Офлайн

#8 Дек. 8, 2008 17:02:45

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

пространства имен

взагалі краще переробити модулі але коли все дуже заплутано то є http://pypi.python.org/pypi/zope.deferredimport/3.4.0



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version