DAY6 Python之代碼塊,小資料池的詳解

來源:互聯網
上載者:User

標籤:規則   16進位   字母   day   image   數字   證明   英文   內容   

一.今日內容

  (一) is,==,id

  (二) 代碼塊的含義

  (三) 小資料池

  (四) python編碼之二

 

(一)代碼塊

  python程式是有代碼塊組成的,塊是一個python程式的文本,是作為一個單元的執行。

  代碼塊:一個模組,一個函數,一個檔案都是一個代碼塊。但是,在互動環境(終端環境)中,每輸入的一個命令,每一行都是一個代碼塊。

而且在一個檔案中的兩個函數,也分別是不同的代碼塊:

 

(二)  ==,id(),is

  ‘==’:用於判斷兩個對象的內容是否相等

#一個“ = ” 表示賦值運算式name = ‘he‘#“==” 表示數值內容的相同print(‘he‘ == ‘he‘)>>> Truename = ‘he‘name1 = ‘alex‘print(name == name1)>>>False

  id() : 返回對象在記憶體當中的記憶體位址

  1.在記憶體中,id都是唯一的

  2.如果兩個變數指向的值的id相同,就證明他們在記憶體中是同一個。

name = ‘he‘name1 = ‘he‘print(id(name))>>> 2101255303664print(id(name1))>>> 2101255303664

  is : 判斷兩個值是否id(記憶體位址)相同

name = ‘he‘name1 = ‘he‘print(name1 is name)>>> True

# 結論:如果is為True,說明記憶體位址相同,那麼值一定相同;如果值相同,記憶體位址未必相同。

 

(三)小資料池(緩衝機制,駐留機制)

  小資料池:又稱為小整數緩衝機制,駐留機制。

  小資料池的前提:小資料池的資料類型只針對“整數,字串,bool值”

概念:    小資料池是Python對記憶體做的一個最佳化,將-5~256的整數,以及一定規則的字串,提前在記憶體中建立
了池,池裡固定的放了這些資料。優點:1. 節省記憶體
   2. 提高效能和效率

  int : -5~256的整數,如果多個變數同時指向這個範圍內的整數,那麼它們在記憶體中將指向同一個記憶體位址。

  str:什麼才是一定規則的字串呢??

  (1)當字串的長度為0或者1時,預設採用小資料池駐留機制。

  

  (2)當字串的長度大於1時,如果只由英文字母,數字,底線組成,預設採用小資料池駐留機制。

  

  (3)用“*”得到的字串,可以分為兩種情況:

    3.1  乘數為1,預設駐留

  

    3.2  乘數為2,但字串總長度小於20時,預設駐留

  

  bool類型:bool值就是True,False,無論你建立多少個變數指向True,False,那麼他在記憶體中只存在一個。

 

  ### 代碼塊與小資料池之間的關係 ####

# pycharm 通過運行檔案的方式執行下列代碼:i1 = 1000i2 = 1000print(i1 is i2)  # 結果為True
通過互動方式中執行下面代碼:>>> i1 = 1000>>> i2 = 1000>>> print(i1 is i2)False

   為什麼在pycharm與互動環境中,輸出的結果會不同呢???這就牽涉到了代碼塊與小資料池之間的關係。

Python在同一個代碼塊中,初始化對象時,會把變數以及對應的值放置到記憶體的一個字典中(類似:dic={‘name‘ =‘he‘對應的記憶體位址}),如果下面代碼再遇到對象的初始化賦值時,如果有相同的值,會去字典中尋找,然後直接複用,指向同一個記憶體位址。
Python在不同代碼塊中,初始化對象時,會遵循小資料池的原則。

參考上面關於代碼塊的概念,因為pycharm中一個py檔案為一個代碼塊,而在互動檔案中,不同的兩行為不同的代碼塊,所以會出現上面的差異。

 

(四)python編碼之二

   編碼之初的內容,看回之前的部落格內容。

  ###########################################################################################

  從之前的內容,我們可以得出以下結論:

  (1)編碼之間是不能相互識別的。

  (2)因為unicode太過於浪費資源,所以在網路傳輸,本機存放區,都必須不能夠以unicode作為編碼格式。

  ###########################################################################################

  前提須知:

    在python3.x版本中,字串的編碼為unicode,其他均為utf-8.

  

  但是這樣又存在了問題,那麼字串作為網路傳輸,本機存放區的資料類型,編碼類別型為unicode,是不允許的。。那要怎麼辦?

  於是此時,引出了有一個python中的基礎資料型別 (Elementary Data Type)bytes。bytes類型好比與str類型的雙胞胎兄弟,str類型所有的方法,bytes類型都可以使用。

  ### bytes類型與str類型的區別?###

  對於英文:

    str:

      表現形式: s1 = ‘hehehe‘

      編碼類別型:  unicode

    bytes:

      表現形式: b1 = b‘hehehe‘

      編碼類別型: 非unicode

  對於中文:

    str:

      表現形式: s1 = ‘呵呵呵‘

      編碼類別型: unicode

     bytes:

      表現形式: b1 = b‘\xe5\x91\xb5\xe5\x91\xb5\xe5\x91\xb5‘

      表現類型:非unicode

結論:
#為什麼需要同時擁有str與bytes?因為中文在bytes中的顯示方式是16進位,不便於閱讀。所以需要同時存在str與bytes#str類型和bytes類型如何使用?在本機存放區/網路socekt傳輸時,用bytes類型,因為字串編碼為unicode。其他用str類型

  ### bytes類型與str類型的轉換?###

‘‘‘str與bytes的轉換‘‘‘str ----> bytes    encode()編碼s1 = ‘alex‘b1 = s1.encode(‘utf-8‘)print(b1,type(b1))
#bytes ---->str    decode()解碼b1 = b‘\xe5\x91\xb5\xe5\x91\xb5\xe5\x91\xb5‘s1 = b1.decode(‘utf-8‘)print(s1)>>> 呵呵呵

  

 

  

  

 

 

  

DAY6 Python之代碼塊,小資料池的詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.