模塊和包

一、
1、有些時候代碼的可讀性差,且重複的代碼多,寫代碼困難大
然後我們就將一些複雜的需要重複使用的功能進行歸類,分別放到同一個py文件中。
需要調用的時候直接拿來用就可以了。--- 就產生了模塊(其實就是py文件)
2、導入模塊
①、是先看自己內存有沒有,沒有的話再引入。
②、創建一個命名空間,在這個命名空間中執行代碼
③、創建了一個xiaomei這個名字,給命名空間中變量和xiaomei綁定在一起
④、import方式導入模塊中的內容和自己文件中的內容不會衝突
def drive():pass
xiaomei.drive()      #執行模塊裏的函數
print(xiaomei.price)
注意:依賴倒置原則。(模塊之間不能互相調用--單項調用)
3import...as:給模塊重命名,重命名之後之前的名字就失效了,新名字可以直接使用
import xiaomei as xm  #import的名字太長我嫌棄
xm.drive()     # 得到原xiaomei中的內容
import xiaomei as xm   #當import的模塊和我文件中的變量重名的時候
def xiaomei():
    print(123)
xiaomei()              # 得到當前文件的 內容  # 123
3.1應用實例:
if 是mysql數據庫:    #當兼容多個模塊的相同操作的時候
    import mysql as db
elif 是oracle數據庫:
    import oracle as db
db.open
db.write       
4import多個模塊
importos,re,time# 就這一句話
os.getcwd() / re.findall() / time.time() # 這樣就可以用了
①但最好是如下一個一個引用:
import os
import re
import time
②導入順序:
先導入內置的模塊
再導入擴展模塊 :requests beautifulsoup django selenium paramiko
最後導入自定義的模塊
③調用模塊中的個別方法:
from xiaomeiimportdriveasd,priceasp
from import的用法 會直接將導入的內容放在全局,
但是dirve中用到的變量和drive方法是一種綁定關係
如果有同名,就會發生覆蓋
1、import xiaomei (比較好)
2、from xiaomeiimport* # 調用模塊中所有方法
# (不太好,因爲如果有500個全部引用?)所以就出現了 __all__
xiaomei模塊:
price = '三十塊錢一位'
def drive():
    print('快上車')
    print(price)
def login():
    print('login ')
如果在文件開始設置__all__ = ['drive'] ,則別的文件用 * 時,只能調用只drive
3、from xiaomeiimportdrive,price (好)
5、如果在 xiaomei 這個模塊中有 print(),則一調用就會打印,爲了避免這個,所以就出現了:(下面這個是xiaomei模塊的內容)
def login():
    print('login ')
if __name__ == '__main__':  #
    login()
    print('小司機')        # login\n   小司機
print(repr(__name__))        #  '__main__'   (所以調用的時候name是xiaomei就進入不了 if 中 所以就不打印。)
6、這個題的意思就是說,(玩,不重要)
①、內置模塊在啓動程序的時候就已經加載到內存了,再定義一個time模塊,並不會怎麼樣(re模塊特殊)
②、例如xiaomei模塊在這個程序等的十秒鐘裏,改變了內容,不會改變!但是加上了( importlib.reload)這個,相當於重新加載一次就會改變!
import time,importlib
import xiaomei
xiaomei.drive()
time.sleep(10)
# importlib.reload(xiaomei)       
print('price : ',xiaomei.price)

二、這個不懂!!!
import re
import sys
print(sys.modules)
print(sys.path)
----------------------------------------------------
執行python解釋器,已經在內存中加載了一些內置的模塊了
導入模塊的時候,如果模塊不存在在sys.modules,才從sys.path給的路徑中依次去查找
sys.path完全可以決定某個模塊能不能被找到(除了已經在內存中加載的一些內置模塊)
------------------------------------
import xiaomei
當一個py文件被當做一個模塊導入的時候,會自動生成一個pyc文件
pyc文件是這個代碼編譯之後的文件,節省了每一次導入代碼之後還要編譯的時間
--------------------------------------------------------
import xiaomei
print(dir(xiaomei))
--------------------------------------------------------
import builtins
print(dir(builtins))
三、包
from glance.apiimportpolicy,versions
policy.get()
在包中使用模塊,就是一直...直到找到模塊,import就行了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章