天天看點

Python學習筆記 (2)變量、常量和資料類型

變量

  顧名思義,變量就是一個會變的量,用一個變量名表示,指向記憶體中一片區域,而指向的區域存的是什麼,這個變量就是什麼資料類型,和C/C++挺不一樣的。變量資料類型可以通過指派變來變去(這就叫動态語言,差別于靜态語言)。

  建立和指派

    python中建立變量時隻需給變量賦一個值,像這樣 a = 1 ,然後變量名就指向存着那個值(1)的一片區域(表述不太對,應該是引用而不是指向)。用 id() 可以檢視該變量的位址。

    還可以像這樣指派 a, b = 1, 2 (a=1,b=2),或是這樣 a=b=1 。

    “可以把任何資料都看成一個“對象”,而變量就是在程式中用來指向這些資料對象的,對變量指派就是把資料和變量給關聯起來。”

    舉個例子,我們給a指派為1, a=1,就相當于建立了變量a,于是解釋器在記憶體位址XXX中建立一個Number對象1,然後把a和XXX中的對象1關聯起來。調用 id(a) ,能得到記憶體位址XXX。

    然後我們給a加上1 a=a+1 或是給a指派為2 a=2 ,就會再次建立一個在記憶體位址YYY中的Number對象2,然後a就被關聯到了對象2上,至于對象1,也不知道是留着還是回收了,這裡先留坑。

    再調用 id(a) ,就會得到記憶體位址YYY,然後 b=2 , id(b) ,得到的還是記憶體位址YYY(官方解釋器倒是這樣的,不過其他解釋器就不一定了),這時a和b引用同一片記憶體區域了,于是 a is b會傳回True(is用來判斷兩個變量是否引用同一片記憶體區域)。還有一種情況,a和b的值都為1,但引用的是不同的對象(所在記憶體區域不同),這時 a is b 會傳回False,而 a == b 會傳回True(==用來判斷兩個變量所引用對象的值是否相等)

    還有一件重要的事,變量名,規則和C/C++差不多——數字,字母,下劃線, 任意組合,數字不能開頭,對大小寫敏感,python的關鍵字不能用,變量名盡量有意義(

Python中變量的命名規範

)。

    檢視自己版本python中的關鍵字可以使用指令help("keywords")

  删除

    del可以删除變量,但不同于C/C++中的free和delete()(别刮開我會說我不會用C/C++在堆區建立變量嗎),python中的del不會删除記憶體中的資料,而是把變量删了(更高端一點的說法是把變量對對象的引用删了)。

    使用方法 del a 或 del a,b,c 

    舉個例子,建立變量a a=1,記憶體位址XXX就建立了對象1,于是a指向了XXX,建立變量b b=1 ,于是b也指向了XXX,然後 del(a) ,調用 id(b) 可以看到,這時b仍然指向XXX,但調用 id(a) 會報錯,說變量a未定義。

    此外,Python還有垃圾回收機制,留坑。

  全局變量和局部變量

    留坑到學函數時

常量

  習慣用全部大寫的變量名表示常量,其實電腦覺得它還是個變量,Python裡沒有C語言裡類似const的東西,換句話說,把變量當成常量用就好。此外,Python還有6個内置常量。

  Python的内置常量

    True、False、None、NotImplemented、Ellipsis、__debug__(注意有些首字母大寫)

    

一些關于内置常量的更具體的資訊

資料類型

  标準資料類型

Number(數字)

    String(字元串)

    List(清單)

    Tuple(元組)

    Set(集合)

    Dictionary(字典)

    一些補充說明

      以上6種資料類型分類

按照存儲資料個數區分 标量/原子類型(值能存放一個值) 數字,字元串
容器類型(存放多個值) 清單,元組,字典

按照可變不可變區分

//可變類型指的是在同一塊記憶體位址之上可以将值替換掉(使用id()函數檢視變量的記憶體位址)

可變 清單,字典,集合
不可變 數字,字元串,元組
按照通路順序區分 直接通路(不可拆分) 數字
順序通路(有下标的) 字元串,元組,清單
key值通路(映射類型) 字典

      内置的type()函數可以用來查詢變量所指的對象類型。此外還可以用 isinstance()來判斷。

使用方法

      Python資料類型轉換

        這裡借用C/C++的概念,可能不興這麼說,但好了解。

        隐式類型轉換

          整數和浮點數做運算時,解釋器将整數轉換為浮點數;

          布爾型和整型做運算時,将布爾型轉換為整型;布爾型和浮點型做運算時,将布爾型轉換為浮點型;

          整型和布爾型與複數做運算時,被轉換為浮點型;

          兩個整型做“/”運算時,無論是否除得盡,結果都為浮點型。

        顯式類型轉換

          (來自

這裡

)

          有時候,我們需要對資料内置的類型進行轉換,資料類型的轉換,你隻需要将資料類型作為函數名即可。

          以下幾個内置的函數可以執行資料類型之間的轉換。這些函數傳回一個新的對象,表示轉換的值。

          

函數 描述
int(x [,base]) 将x轉換為一個整數
float(x) 将x轉換到一個浮點數
complex(real [,imag]) 建立一個複數
str(x) 将對象 x 轉換為字元串
repr(x) 将對象 x 轉換為表達式字元串
eval(str)

用來計算在字元串中的有效Python表達式,并傳回一個對象

Ps:eval()的一個應用——

python 如何定義n個變量 (變量聲明自動化)
tuple(s) 将序列 s 轉換為一個元組
list(s) 将序列 s 轉換為一個清單
set(s) 轉換為可變集合
dict(d) 建立一個字典。d 必須是一個序列 (key,value)元組。
frozenset(s) 轉換為不可變集合
chr(x) 将一個整數轉換為一個字元
ord(x) 将一個字元轉換為它的整數值
hex(x) 将一個整數轉換為一個十六進制字元串
oct(x) 将一個整數轉換為一個八進制字元串
round(x[,y]) 将一個浮點數x四舍五入為一個整數,若有第二個參數,則四舍五入為y位浮點數

  自定義資料類型

    留坑