模組與包 Mysql與Oracle區別

來源:互聯網
上載者:User

標籤:span   部分   函數   報錯   否則   控制   python2   通過   卸載   

1 什麼是模組?

常見的情境:一個模組就是一個包含了python定義和聲明的檔案,檔案名稱就是模組名字加上.py的尾碼。

   但其實import載入的模組分為四個通用類別: 

  1 使用python編寫的代碼(.py檔案)

  2 已被編譯為共用庫或DLL的C或C++擴充

  3 包好一組模組的包

  4 使用C編寫並連結到python解譯器的內建模組

2),模組的執行:import,每個模組都是一個獨立的名稱空間。

模組可以包含可執行檔語句和函數的定義,這些語句的目的是初始化模組,它們只在模組名第一次遇到匯入import語句時才執行(import語句是可以在程式中的任意位置使用的,且針對同一個模組很import多次,為了防止你重複匯入,python的最佳化手段是:第一次匯入後就將模組名載入到記憶體了,後續的import語句僅是對已經載入大記憶體中的模組對象增加了一次引用,不會重新執行模組內的語句)。

 

3)1,from:而from 語句相當於import,也會建立新的名稱空間,但是將my_moudle中的名字直接匯入到當前的名稱空間中,在當前名稱空間中,直接使用名字就可以了。

 1 from my_moudle import read1,read2


注意:當你調用模組時,在你當前使用的頁面中不能出現和模組,相同的對象,名稱。不然會存在一個覆蓋的情況,而且當你覆蓋以後,後面你調用的模組會永久失去效用,所以盡量不要取和模組相同的名稱



PS:當你運行一個模組的時候,模組會先載入到記憶體,那個時候你是不能更改的,
2.from spam import * 把spam中所有的不是以底線(_)開頭的名字都匯入到當前位置,
大部分情況下我們的python程式不應該使用這種匯入方式,因為*你不知道你匯入什麼名字,
很有可能會覆蓋掉你之前已經定義的名字。而且可讀性極其的差,在互動式環境中匯入時沒有問題。
PS:from spam import *:是把所有的spam裡的內容都載入到記憶體中,並且隨時可以調用,而載入的位置是當前你輸入這段代碼的位置。

4)

考慮到效能的原因,每個模組只被匯入一次,放入字典sys.module中,如果你改變了模組的內容,你必須重啟程式,python不支援重新載入或卸載之前置入的模組,

有的同學可能會想到直接從sys.module中刪除一個模組不就可以卸載了嗎,注意了,你刪了sys.module中的模組對象仍然可能被其他程式的組件所引用,因而不會被清除。

特別的對於我們引用了這個模組中的一個類,用這個類產生了很多個物件,因而這些對象都有關於這個模組的引用


import time,importlibimport aa time.sleep(20)# importlib.reload(aa)aa.func1()在20秒的等待時間裡,修改aa.py中func1的內容,等待test.py的結果。開啟importlib注釋,重新測試


結果:是不會改變,因為當你啟動並執行時候,系統已經把代碼載入到記憶體,在記憶體中是不會被修改的。

如果用reload的話,在reload()裡面加的是被調用的模組名,另外在修改以後要ctrl + s儲存一下,然後才能改。

5):__name__

我們可以通過模組的全域變數__name__來查看模組名:
當做指令碼運行:
__name__ 等於‘__main__‘

當做模組匯入:
__name__= 模組名

作用:用來控制.py檔案在不同的應用情境下執行不同的邏輯
if __name__ == ‘__main__‘:

__name__:__name__在被調用的模組中,顯示的是被調用模組的名字(比如:我被調用的模組名字是verw,那我調用的print(__name__)顯示的是verw),而在調用的程式中顯示的是__main__。

 

6):在定義一個變數名的時候,變數名盡量不要和內建函數,還有模組名重複,不然會產生錯誤。

 

7):包:含義以及注意事項。   (

相對路徑在同一個包內部能用,專門提供給別人用。 絕對路徑,是全部地方都能用,但是當裡面的一個路徑一遍就會全部改變, 所以相對來說,以後多用相對路徑。 import *的,要用‘__all__’=‘ ’接收

1. 無論是import形式還是from...import形式,凡是在匯入語句中(而不是在使用時)遇到帶點的,都要第一時間提高警覺:這是關於包才有的匯入文法

2. 包是目錄級的(檔案夾級),檔案夾是用來組成py檔案(包的本質就是一個包含__init__.py檔案的目錄)

3. import匯入檔案時,產生名稱空間中的名字來源於檔案,import 包,產生的名稱空間的名字同樣來源於檔案,即包下的__init__.py,匯入包本質就是在匯入該檔案

強調:

  1. 在python3中,即使包下沒有__init__.py檔案,import 包仍然不會報錯,而在python2中,包下一定要有該檔案,否則import 包報錯

  2. 建立包的目的不是為了運行,而是被匯入使用,記住,包只是模組的一種形式而已,包即模組

注意事項:1.關於包相關的匯入語句也分為import和from ... import ...兩種,但是無論哪種,無論在什麼位置,在匯入時都必須遵循一個原則:
凡是在匯入時帶點的,點的左邊都必須是一個包,否則非法。可以帶有一連串的點,如item.subitem.subsubitem,但都必須遵循這個原則。2.對於匯入後,在使用時就沒有這種限制了,點的左邊可以是包,模組,函數,類(它們都可以用點的方式調用自己的屬性)。3.對比import item 和from item import name的應用情境:如果我們想直接使用name那必須使用後者。

2:包的調用-----絕對匯入和相對匯入

我們的最頂級包glance是寫給別人用的,然後在glance包內部也會有彼此之間互相匯入的需求,這時候就有絕對匯入和相對匯入兩種方式:絕對匯入:以glance作為起始相對匯入:用.或者..的方式最為起始(只能在一個包中使用,不能用於不同目錄內)例如:我們在glance/api/version.py中想要匯入glance/cmd/manage.py
在glance/api/version.py#絕對匯入from glance.cmd import managemanage.main()#相對匯入from ..cmd import managemanage.main()

注意:特別需要注意的是:可以用import匯入內建或者第三方模組(已經在sys.path中),但是要絕對避免使用import來匯入自訂包的子模組(沒有在sys.path中),應該使用from... import ...的絕對或者相對匯入,且包的相對匯入只能用from的形式。

PS:    也就是說,一個包內的兩個不同檔案,不要用import直接匯入,因為a檔案import另b檔案的時候,其c檔案就調用不了a。

(1)絕對匯入:

也就是from匯入,從一個包調用另一個包。

(2)相對匯入:

也就是用.。和。。匯入,。一個點的時候表示同級的目錄,。。兩個點的時候表示上一層目錄。

PS:用.和..表示的時候,同一個包內是不能調用的,即使調用了也沒有用。

 

 

8):Mysql與Oracle區別

1.  Oracle是大型資料庫而Mysql是中小型資料庫,Oracle市場佔有率達40%,Mysql只有20%左右,同時Mysql是開源的而Oracle價格非常高。
2. Oracle支援大並發,大訪問量,是OLTP最好的工具。
3. 安裝所用的空間差別也是很大的,Mysql安裝完後才152M而Oracle有3G左右,且使用的時候Oracle佔用特別大的記憶體空間和其他機器效能。
4.Oracle也Mysql操作上的一些區別

 

模組與包 Mysql與Oracle區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.