2014-12-19 181 views
3

假設我們有兩個文件 「a.py」 和 「b.py」蟒蛇進口和範圍

a.py

from b import funcB 

funcB() 

b.py

varB = 123 

def funcB(): 
    print(varB) 

正如你在「a.py」中看到的,我從「b」只導入「funcB」, 之後,我在「a」中執行「funcB」,但是一些如何「funcB」 可以看到「b」中定義的「varB」。但我只有進口 「funcB」。我以爲「從b導入funcB」只會導入「funcB」 而沒有別的。

爲什麼「funcB」可以訪問「varB」?這是某種設計決定嗎?

謝謝

+7

*「這是某種設計決定嗎?」是的。整個模塊是真正導入的,但只有您指定的名稱添加到您當前的名稱空間。否則,您導入的功能將無法訪問,例如輔助函數和導入在源腳本中定義,這將是非常無益的。 – jonrsharpe

+1

相關:[如何從... import ...語句導入全局變量](http://stackoverflow.com/q/25283616) –

+0

這也很有用:[from import vs import](http:// stackoverflow .COM /問題/ 9439480 /從進口-VS-進口) –

回答

0

當您導入模塊時,它不僅會讓您訪問剛導入的內容。它也會執行整個腳本。

這就是爲什麼你可以在很多腳本

if __name__ == '__main__': 
    some code 

否則,some code將在進口實行看到。因此,模塊的所有功能都被聲明,並且所有'功能不足'代碼都被執行。而這就是邏輯,否則,一個函數永遠不會使用參數中沒有給出的東西,甚至不會使用其他函數。