2015-05-04 64 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

這根本沒有任何意義。你不應該從'Two.py'導入'example1'嗎?並注意,你從兩個import example1'中省略'.py' - '。你究竟想要達到什麼目標? – jonrsharpe

回答

0

首先,導入通過簡單地命名的模塊,沒有結尾的文件:

from Two import example2 

這應該可怕的失敗,因爲存在Two.py

一個簡單的例子來沒有example2定義做什麼,我想你想的樣子說:

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

如果您確實需要在函數2中使用函數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 

上述狀態,有一些所謂的Two.py文件,它包含一個名爲example2函數的定義。但是,如果仔細查看您的Two.py文件,則可以看到沒有導入example2。因此,編譯器會發出警告,告訴你有什麼錯誤。