變量
顧名思義,變量就是一個會變的量,用一個變量名表示,指向記憶體中一片區域,而指向的區域存的是什麼,這個變量就是什麼資料類型,和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位浮點數 |
自定義資料類型
留坑