一般使用import和from...import...導入模塊。
以下述spam.py內的文件代碼為例。
# 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
一、import 模塊名
# run.py
import spam # from the spam.py
import spam
import首次導入模塊發生了3件事:
- 以模塊為准創造一個模塊的名稱空間
- 執行模塊對應的文件,將執行過程中產生的名字都丟到模塊的名稱空間
- 在當前執行文件中拿到一個模塊名
模塊的重復導入會直接飲用之前創造好的結果,不會重復執行模塊的文件,即重復導入會發生:spam=spam=模塊名稱空間的內存地址
# 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
二、from 模塊名 import 具體的功能
# run.py
from spam import money
money = 10
print(money) # 10
from...import...首次導入模塊發生了3件事:
- 以模塊為准創造一個模塊的名稱空間
- 執行模塊對應的文件,將執行過程中產生的名字都丟到模塊的名稱空間
- 在當前執行文件的名稱空間中拿到一個名字,該名字直接指向模塊中的某一個名字,意味着可以不用加任何前綴而直接使用
- 優點:不用加前綴,代碼更加精簡
- 缺點:容易與當前執行文件中名稱空間中的名字沖突
導入文件內所有的功能:
# spam.py
__all__ = ['money', 'read1'] # 只允許導入'money'和'read1'
# run.py
from spam import * # 導入spam.py內的所有功能,但會受限制於__all__
三、import和from...import...的異同
相同點:
- 兩者都會執行模塊對應的文件,兩者都會產生模塊的名稱空間
- 兩者調用功能時,需要跑到定義時尋找作用域關系,與調用位置無關
不同點
- import需要加前綴;from...import...不需要加前綴