python基礎之變數型別簡介
變數型別
變數儲存在記憶體中的值。這就意味著在建立變數時會在記憶體中開闢一個空間。
基於變數的資料型別,直譯器會分配指定記憶體,並決定什麼資料可以被儲存在記憶體中。
因此,變數可以指定不同的資料型別,這些變數可以儲存整數,小數或字元。
-
變數
python變數是動態的(它自動地跟蹤你的型別而不是要求宣告程式碼),但也是強型別語言(只能對一個物件進行適合該型別的有效的操作)。 在Python中型別屬於物件,而不是屬於變數,變數只是指向物件的引用或者叫地址。比如
a=3 #變數a指向物件3的地址
python中每個物件都有一個引用計數器,一旦這個計數器被設定為零,這個物件的記憶體空間就會被回收。
*思考 迴圈檢測器???
-
變數賦值
a = b = c = 1 a, b, c = 1, 2, "john"
Python3.X 原始碼檔案預設使用utf-8編碼,所以可以正常解析中文,無需指定 UTF-8 編碼。
如果你使用編輯器,同時需要設定 py 檔案儲存的格式為 UTF-8,否則會出現類似以下錯誤資訊:
-
標準資料型別 在記憶體中儲存的資料可以有多種型別。
例如,一個人的年齡可以用數字來儲存,他的名字可以用字元來儲存。
Python 定義了一些標準型別,用於儲存各種型別的資料。
Python有五個標準的資料型別:
- Numbers(數字)
- String(字串)
- List(列表)
- Tuple(元組)
- Dictionary(字典)
-
Python數字
Python支援四種不同的數字型別:
- int(有符號整型)
- long(長整型[也可以代表八進位制和十六進位制])
- float(浮點型)
- complex(複數)
a=12 lon=123L flo=12.3E100 com1=3.14j com2=4.53e-7j
長整型也可以使用小寫 l,但是還是建議您使用大寫 L,避免與數字 1 混淆。Python使用 L 來顯示長整型。 Python 還支援複數,複數由實數部分和虛數部分構成,可以用 a + bj,或者 complex(a,b) 表示, 複數的實部 a 和虛部 b 都是浮點型。
-
Python元組
元組是另一個數據型別,類似於List(列表)。
元組用"()"標識。內部元素用逗號隔開。但是元組不能二次賦值,相當於只讀列表。
tu=(11,22,33,44) tu[0]=88 #TypeError: 'str' object does not support item assignment
-
Python 字典
字典(dictionary)是除列表以外python之中最靈活的內建資料結構型別。列表是有序的物件集合,字典是無序的物件集合。
兩者之間的區別在於:字典當中的元素是通過鍵來存取的,而不是通過偏移存取。
字典用"{ }"標識。字典由索引(key)和它對應的值value組成。
users=[ {"name":"tom","age":12}, {"name":"tony","age":12}, {"name":"anli","age":12}, {"name":"dapen","age":12} ] for item in users: for v in item.values(): print(v) for k in item.keys(): print(k) for item in users: for k in item.keys(): print(k,":",item[k]) users[0][3]='haha'
switcher={ 0:'zero', 1:'one', 2:'two', 3:lambda:"three" } print(switcher.get(3)())
-
Python資料型別轉換
函式 描述 int(x [,base]) 將x轉換為一個整數 long(x [,base] ) 將x轉換為一個長整數 float(x) 將x轉換到一個浮點數 complex(real [,imag]) 建立一個複數 str(x) 將物件 x 轉換為字串 repr(x) 將物件 x 轉換為表示式字串 eval(str) 用來計算在字串中的有效Python表示式,並返回一個物件 tuple(s) 將序列 s 轉換為一個元組 list(s) 將序列 s 轉換為一個列表 set(s) 轉換為可變集合 dict(d) 建立一個字典。d 必須是一個序列 (key,value)元組。 frozenset(s) 轉換為不可變集合 chr(x) 將一個整數轉換為一個字元 unichr(x) 將一個整數轉換為Unicode字元 ord(x) 將一個字元轉換為它的整數值 python 的所有資料型別都是類,可以通過 type() 檢視該變數的資料型別:
type()不會認為子類是一種父類型別。 isinstance()會認為子類是一種父類型別。
補充
-
可變物件拷貝
list1=[1,2,3] list2=list1 #這是重複引用,不是拷貝 list3=list1[:] #拷貝 list4=list1.copy() #檢查物件是否相等 list1==list3 #true 比較的是內容 list1 is list3 #false 比較的是地址是否是同一個地址
但是
X=12 Y=12 X IS Y # True
這是因為python快取並複用了小整數和小字串,即使執行x=14,物件12也不會被回收,他將可能被儲存在一個系統表中,等待你的程式碼下次使用12這個物件。
可以通過以下程式碼來驗證物件被引用的次數
import sys x=12 y=12 z=12 print(sys.getrefcount(12))