import與exec執行文件的異同

1. import導入方式爲2種,1)import 模塊名 2)from 模塊 import 變量或函數。函數

這二者的區別是前者的引用須要用「模塊名.函數名或變量名」的方式引用,且模塊中有與當前文件同名的對象時,不會覆蓋當前文件中的對象。spa

另外一個值得注意的地方是,import導入的函數的名稱空間仍然在原來的模塊中。好比,當前環境中和被導入模塊都存在一個變量x, 即便在當前環境中修改了X,此時執行被導入模塊中的函數B,B中使用了X,此時發現B中的X的值仍然是修改以前的X。code

 

 1 ##test_0.py
 2 x=99
 3 def show_0():  4     print(x)  5 
 6 ##test_1.py
 7 from test0 import *
 8 
 9 def show_1(): 10     print(x) 11 
12 x=1
13 show_0() 14 show_1()

此時執行的結果以下:對象

99blog

1作用域

這個比較奇特,因此import導入文件並不簡單地合二爲一,各自仍是存在本身的做用域。class

 

2. exec執行其餘文件。test

exec和import在功能上仍是有較大區別,exec是執行整個文件,而沒法選擇其中的函數。而import在導入時「附帶地」執行最外層的代碼,其主要做用仍是執行其中的函數。在都執行最外層代碼的狀況下,這兩種方法的區別是exec像是將代碼合二爲一,會影響當前環境的變量。import執行文件時,若是是「import 模塊名「的形式,則不會影響其中的變量;若是是「from 模塊名 import 變量」,則會影響。但如前面所說,並非合而爲一。import

相關文章
相關標籤/搜索