通常使用import和from...import...導入模塊。
如下述spam.py內的文件代碼爲例。python
# spam.py print('from the spam.py') money = 1000 def read1(): print('spam模塊:', money) def read2(): print('spam模塊') read1() def change(): global money money = 0
# run.py import spam # from the spam.py import spam
import首次導入模塊發生了3件事:spa
1.以模塊爲準創造一個模塊的名稱空間
2.執行模塊對應的文件,將執行過程當中產生的名字都丟到模塊的名稱空間
3.在當前執行文件中拿到一個模塊名
模塊的重複導入會直接飲用以前創造好的結果,不會重複執行模塊的文件,即重複導入會發生:spam=spam=模塊名稱空間的內存地址code
能夠給導入模塊取別名orm
# run.py import spam as sm money = 111111 sm.money sm.read1() # 'spam模塊:1000' sm.read2 sm.change() print(money) # 1000
導入多個模塊內存
import spam, time, os # 推薦使用下述方式 import spam import time import os
# run.py from spam import money money = 10 print(money) # 10
from...import...首次導入模塊發生了3件事:作用域
1.以模塊爲準創造一個模塊的名稱空間
2.執行模塊對應的文件,將執行過程當中產生的名字都丟到模塊的名稱空間
3.在當前執行文件的名稱空間中拿到一個名字,該名字直接指向模塊中的某一個名字,意味着能夠不用加任何前綴而直接使用
優勢:不用加前綴,代碼更加精簡
缺點:容易與當前執行文件中名稱空間中的名字衝突
導入文件內全部的功能:form
# spam.py __all__ = ['money', 'read1'] # 只容許導入'money'和'read1'
# run.py from spam import * # 導入spam.py內的全部功能,但會受限制於__all__
三丶impot和from...import...的異同
相同點:class
1.二者都會執行模塊對應的文件,二者都會產生模塊的名稱空間
2.二者調用功能時,須要跑到定義時尋找做用域關係,與調用位置無關
不一樣點import
1.import須要加前綴;from...import...不須要加前綴im