? 面試題:?
? ? ? ? import module與from module import * 兩種模塊導入有何區別
? ? ? ? ? ? ?1. import module 引用共享變量時,要使用module.變量名,而from module ? ?import * 直接使用變量名即可
? ? ? ? ? ? ?2. import module方式 ?
? ? ? ? ? ? ? ? 本地不會創建新變量,操作的是目標模塊的變量
? ? ? ? ? ? ?3. from module import *方式
? ? ? ? ? ? ? ? ?在本地創建一個與目標模塊相同的變量名,并且默認與目標模塊變量指向同一個內存空間?
import導入模塊
1. import 搜索路徑
路徑搜索
- 從上面列出的目錄里依次查找要導入的模塊文件
- '' 表示當前路徑
- 列表中的路徑的先后順序代表了python解釋器在搜索模塊時的先后順序
程序執行時添加新的模塊路徑
sys.path.append('/home/itcast/xxx')
sys.path.insert(0, '/home/itcast/xxx') # 可以確保先搜索這個路徑
In [37]: sys.path.insert(0,"/home/python/xxxx")
In [38]: sys.path
Out[38]:
['/home/python/xxxx','','/usr/bin','/usr/lib/python35.zip','/usr/lib/python3.5','/usr/lib/python3.5/plat-x86_64-linux-gnu','/usr/lib/python3.5/lib-dynload','/usr/local/lib/python3.5/dist-packages','/usr/lib/python3/dist-packages','/usr/lib/python3/dist-packages/IPython/extensions','/home/python/.ipython']
2. 重新導入模塊
模塊被導入后,import module
不能重新導入模塊,重新導入需用reload
?
3. 多模塊開發時的注意點
recv_msg.py模塊
from common import RECV_DATA_LIST
# from common import HANDLE_FLAG
import commondef recv_msg():"""模擬接收到數據,然后添加到common模塊中的列表中"""print("--->recv_msg")for i in range(5):RECV_DATA_LIST.append(i)def test_recv_data():"""測試接收到的數據"""print("--->test_recv_data")print(RECV_DATA_LIST)def recv_msg_next():"""已經處理完成后,再接收另外的其他數據"""print("--->recv_msg_next")# if HANDLE_FLAG:if common.HANDLE_FLAG:print("------發現之前的數據已經處理完成,這里進行接收其他的數據(模擬過程...)----")else:print("------發現之前的數據未處理完,等待中....------")
handle_msg.py模塊
from common import RECV_DATA_LIST
# from common import HANDLE_FLAG
import commondef handle_data():"""模擬處理recv_msg模塊接收的數據"""print("--->handle_data")for i in RECV_DATA_LIST:print(i)# 既然處理完成了,那么將變量HANDLE_FLAG設置為True,意味著處理完成# global HANDLE_FLAG# HANDLE_FLAG = Truecommon.HANDLE_FLAG = Truedef test_handle_data():"""測試處理是否完成,變量是否設置為True"""print("--->test_handle_data")# if HANDLE_FLAG:if common.HANDLE_FLAG:print("=====已經處理完成====")else:print("=====未處理完成====")
main.py模塊
from recv_msg import *
from handle_msg import *def main():# 1. 接收數據recv_msg()# 2. 測試是否接收完畢test_recv_data()# 3. 判斷如果處理完成,則接收其它數據recv_msg_next()# 4. 處理數據handle_data()# 5. 測試是否處理完畢test_handle_data()# 6. 判斷如果處理完成,則接收其它數據recv_msg_next()if __name__ == "__main__":main()
?
?