2013-01-12 77 views
3

導出函數如果我有以下內容的模塊/文件foo.py不從Python模塊

from math import sqrt 

def foo(): 
    pass 

如果我將其導入另一個腳本,sqrt也模塊foo內定義。

import foo  
dir(foo) 

的輸出是

[..., # other things 
'foo', 
'sqrt'] 

如何避免這種情況?即,要麼指定sqrt不被導出,要麼僅導出特定功能 - 在這種情況下,僅導出用戶定義的功能。我知道,對於用戶定義的函數,您可以在模塊內通過前綴下劃線來私有地定義它們,但在這種情況下,它不是用戶定義的函數,所以我不能用下劃線前綴來定義它。

+3

爲什麼你需要防止這種情況?這是正常的python行爲,您向模塊提出了所有在其中定義的名稱。 –

回答

4

它不是一個用戶定義的函數,所以我不能用下劃線進行定義:

如果你真的想避免導入特定的名稱,你可以這樣做字首。

是的,你可以:

from math import sqrt as _sqrt 

另一種方法是在功能範圍只導入對象,你需要他們。

(雖然這可能會回答你的問題,我仍然不知道爲什麼你會想這樣做,這兩個選項是繁瑣的,不會讓你的代碼看起來更好。)

5

你不能,但它不應該阻礙,它將被綁定到foo命名空間,如foo.sqrt。如果從math導入sqrt,它將是math.sqrt。這是命名空間的重點。在這種情況下

from foo import foo, bar, ...

1

你應該使用:

from math import sqrt as sqrt_m 
import foo 

所以,你可以使用

sqrt_m()mathsqrt()得到sqrtsqrt從獲取