2015-05-04 2 views
1

У меня есть файл, давайте назовем его One.py:Вызов функции из функции внутри импортируемого файла

from Two.py import example2 

def example2(): 
    print "something!" 

и другой файл с именем Two.py:

def example1(): 
    print "Other thing!" 
    example2() 

Однако, в нижней строке, когда Я пытаюсь позвонить example2(), он не узнает его. Я бы хотел просто не импортировать One.py в Two.py, потому что это создаст цикл импорта.

+0

btw Ваш импорт неправильный, и почему вы переопределили example2. Просьба уточнить. –

+2

Это не имеет никакого смысла. Разве вы не должны импортировать 'example1' из' Two.py'? Обратите внимание, что вы не указываете '.py' -' из Two import example1'. Чего вы на самом деле пытаетесь достичь ?! – jonrsharpe

ответ

0

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

from Two import example2 

Это должно ужасно потерпеть неудачу, так как нет никакого определения example2 в Two.py

простой пример делать то, что я предполагаю, что вы хотите, выглядит следующим образом:

One.py:

def function1(): 
    print 'I am function 1' 

Two.py:

from One import function1 
def function2(): 
    print 'I am function 2' 
function1() 
function2() 
+0

Если вам действительно нужно использовать функцию 1 внутри функции два, а затем импортировать функцию 2 в один модуль, возможно, вам лучше определить обе функции внутри одного модуля. – Dschoni

0

Как указано в комментарии, ваш код не делает слишком много смысла. Давайте посмотрим на файл Two.py:

#Two.py 
def example1(): 
print "Other thing!" 
example2() 

Файл containts определение для функции с именем example1, который печатает строку. Когда он исполняется, example2() никогда не будет вызван, потому что example2() никогда не был объявлен нигде. Если вы объявите его локально, вам нужно будет добавить функцию в Two.py, которая ее определяет. Например, добавьте следующие строки кода в файл Two.py:

def example2(): 
    print "Example 2 was called" 

Теперь, когда вы пытаетесь вызвать функцию, компилятор будет знать, что вы хотите, чтобы это сделать, потому что вы объявили его на месте. Если, с другой стороны, вы не объявили функцию в том же файле, но указали ее в другом месте, вы можете импортировать функцию из другого файла. Поскольку One.py имеет определение для example2(), вы можете импортировать модуль в свой Two.py, чтобы получить к нему доступ. Ваши последние два файла должны выглядеть так:

#Two.py 
from One.py import example2 #instead of importing it from elsewhere, you can also define it in the actual file 
def example1(): 
    print "Other thing!"  #notice the indentation that you left out 
example1() 
example2() 

#One.py 
def example2(): 
    print "something!" 

Это будет выполнено без ошибок.

Чтобы понять, что пошло не так с вашей реализации, рассмотрим следующую строку кода:

from Two.py import example2 

Вышеуказанные состояния, Eсть какой-то файл называется Two.py и что он содержит определение функции под названием example2. Но если вы внимательно посмотрите на свой файл Two.py, вы увидите, что для импорта не было example2. Таким образом, компилятор выдает предупреждение о том, что что-то не так.

Смежные вопросы