1. 程式人生 > >python基礎之變數型別簡介

python基礎之變數型別簡介

變數型別

變數儲存在記憶體中的值。這就意味著在建立變數時會在記憶體中開闢一個空間。

基於變數的資料型別,直譯器會分配指定記憶體,並決定什麼資料可以被儲存在記憶體中。

因此,變數可以指定不同的資料型別,這些變數可以儲存整數,小數或字元。

  1. 變數

    python變數是動態的(它自動地跟蹤你的型別而不是要求宣告程式碼),但也是強型別語言(只能對一個物件進行適合該型別的有效的操作)。 在Python中型別屬於物件,而不是屬於變數,變數只是指向物件的引用或者叫地址。比如

        a=3
        #變數a指向物件3的地址
    

    python中每個物件都有一個引用計數器,一旦這個計數器被設定為零,這個物件的記憶體空間就會被回收。

    *思考 迴圈檢測器???

  2. 變數賦值

        a = b = c = 1
        a, b, c = 1, 2, "john"
    

    Python3.X 原始碼檔案預設使用utf-8編碼,所以可以正常解析中文,無需指定 UTF-8 編碼。

    如果你使用編輯器,同時需要設定 py 檔案儲存的格式為 UTF-8,否則會出現類似以下錯誤資訊:

  3. 標準資料型別 在記憶體中儲存的資料可以有多種型別。

    例如,一個人的年齡可以用數字來儲存,他的名字可以用字元來儲存。

    Python 定義了一些標準型別,用於儲存各種型別的資料。

    Python有五個標準的資料型別

    • Numbers(數字)
    • String(字串)
    • List(列表)
    • Tuple(元組)
    • Dictionary(字典)
  4. Python數字

    Python支援四種不同的數字型別:

    1. int(有符號整型)
    2. long(長整型[也可以代表八進位制和十六進位制])
    3. float(浮點型)
    4. 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 都是浮點型。

  5. Python元組

    元組是另一個數據型別,類似於List(列表)。

    元組用"()"標識。內部元素用逗號隔開。但是元組不能二次賦值,相當於只讀列表。

        tu=(11,22,33,44)
        tu[0]=88  #TypeError: 'str' object does not support item assignment
    
  6. 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)())
    
  7. 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()會認為子類是一種父類型別。

補充

  1. 可變物件拷貝

        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))