標籤:輸出變數 code 分享圖片 規則 緩衝機制 字串駐留 其他 byte img
一 代碼塊
什麼是代碼塊???
Python程式是由代碼塊構造的。先舉一個例子:
1 for i in ‘12334567‘:2 print(i)
1 def func():2 print(‘Hello,world!‘)
1 class A:2 name = ‘colin‘
從上面的例子可以稱為代碼塊,雖然上面的縮排的內容都叫代碼塊,但是他們並不是python中嚴格定義的代碼塊。
那麼,python中真正意義上的代碼塊又怎麼定義?
因此,我們定義:一個模組,一個函數,一個類,一個檔案等都是一個代碼塊。
此外,在電腦終端模式下,輸入的每個命令我們也可以認為是一個代碼塊。如:
二 id, is , == 之間的關係 在Python中,id是什嗎?
我們可以理解為id是電腦的記憶體位址,當你利用id()內建函數去查詢一個資料的記憶體位址,例如:
1 name = ‘colin‘2 print(id(name)) # 1986166776248
從上面的程式碼分析可知,當調用python中id()指令時,會輸出變數name的記憶體位址,其地址位置為:1986166776248 ,第二次調用後,記憶體位址發生變化,為:1957356364216 。可知,變數在記憶體中地址是不固定的。
is 是什嗎? == 又是什嗎?
我們將is 用來判斷兩個變數的id值是否相等,而 ‘==’ 是表示該符號兩邊的數值是否相等。
如果記憶體位址相等,那麼== 兩邊所指向的是同一個記憶體位址。
總的來說,我們總結為:如果is是True,那麼== 一定是True
三 小資料池(緩衝機制,駐留機制)
什麼是小資料池?
小資料池也稱為小整數緩衝機制,或者稱為駐留機制等等,主要是用於python對記憶體做的一個最佳化,通常將-5!~256的整數,以及一定規則的字串,提前在記憶體中建立了池,容器,容器裡固定的放入這些數。
小資料池的應用資料類型:整數,字串,bool值。
而為什麼要使用小資料池???
其優點主要有以下兩點:
1. 節省記憶體,
2. 提高效能與效率。
python會將一定規則的字串在字串駐留池中,建立一份,當你將這些字串賦值給變數時,並不會重新建立對象, 而是使用在字串駐留池中建立好的對象。
int:對於整數來說,小資料池的範圍是-5~256 ,如果多個變數都是指向同一個(在這個範圍內的)數字,他們在記憶體中指向的都是一個記憶體位址。
str:字串要從下面這幾個大方向討論:
1,字串的長度為0或者1,預設都採用了駐留機制(小資料池)
2,字串的長度>1,且只含有大小寫字母,數字,底線時,才會預設駐留。
3,用乘法得到的字串,分兩種情況。
3.1 乘數為1時:
僅含大小寫字母,數字,底線,預設駐留。
含其他字元,長度<=1,預設駐留。
含其他字元,長度>1,預設駐留。
3.2 乘數>=2時:
僅含大小寫字母,數字,底線,總長度<=20,預設駐留。
在大環境下的python3中:
str:記憶體(內部)編碼方式為Unicode
bytes:python的基礎資料類型之一,它和str相當於雙胞胎,str擁有的所有方法,bytes類型都適用。
編碼之間不能相互識別:
1. 由於編碼之間不能相互識別。(由於:str 內部編碼是以unicode方式。)
2. 網路傳輸,或者硬碟儲存的01010101,必須是以非unicode編碼方式的01010101.
# str --------> bites encode 編碼
1 s1 = ‘colin‘2 s2 = ‘明天‘3 b1 = s1.encode(‘utf-8‘)4 print(b1) # b‘colin‘5 b2 = s2.encode(‘gbk‘)6 print(b2) # b‘\xc3\xf7\xcc\xec‘
# bytes --------> str decode 解碼
1 b1 = b‘\xc3\xf7\xcc\xec‘ # gbk的bytes2 s2 = b1.decode(‘gbk‘)3 print(s2) # 明天
本文大量引用的地址為:
http://www.cnblogs.com/jin-xin/articles/9439483.html#4039042
Python 代碼塊 小資料池