2012-05-31 89 views
0

問題的快速演示:
定義模塊,並將其命名包含它functions.py:(這只是一個例子的Python:如何清理了凌亂彈出列表

from __future__ import division 
from scipy import * 

def a(): 
    return sin(1) 

現在嘗試如下使用它在一個單獨的文件:

import functions as f 

如果鍵入f彈出的列表顯示了所有scipy內容,但它應該是唯一a!見:
enter image description here

如何解決這個問題?

此問題使得難以看到模塊functions中存在什麼。

注:
1)認爲該模塊function將具有許多用戶定義的函數。
2)爲什麼scipy功能在全球範圍內可用沒有問題。沒關係。問題是爲什麼他們顯示爲f的成員?!
它可能是Pyscripter中的一個錯誤,我不確定!

回答

2

您的模塊functions將包含對全局導入的所有內容的引用,並在其範圍內進行聲明。

當你在做模塊內部的from scipy import *時,它會導入所有的東西,因爲它應該很好,你可以從你的功能模塊訪問所有的scipy函數。

如果你只是想看看a()進口functions後,將其更改爲這個

# functions.py 
def a(): 
    from scipy import sin 
    return sin(1) 

,這將確保您的進口沒有提及將導入您的模塊的人存在。

這裏有一些readingimports你可以通過。

0

首先,你應該避免import *,因此你的代碼應該是這樣的:

from __future__ import division 
from scipy import sin 

def a(): 
    return sin(1) 

from __future__ import division 
import scipy 

def a(): 
    return scipy.sin(1) 

另一種方法是把它添加到您的模塊:

__all__ = ['a'] 
+0

我會說'__all__'不是解決方案的另一部分。 @Developer應該使用你的兩個導入選項*和*中的一個來設置'__all__'。 – Duncan