python基礎(2)---資料類型,python資料類型
1.python版本間的差異:
2.x與3.x版本對比
| version |
2.x |
3.x |
| print |
print " "或者print()列印都可以正常輸出 |
只能print()這種形式列印,否則會出現 SyntaxError |
input raw_inut |
input:輸出原生的資料類型,輸入什麼類型的值,就輸出什麼類型 raw_input:全部以字串形式輸出 |
3.x取消了raw_input方法,只能使用input() 方式提示輸入字串, 該方法和2.x版本的raw_input() 如果想要實現與2.x input()輸出原生資料類型的值, 可以使用eval(input()) |
| class |
2.x支援新式類,和經典類,使用新式類時,類繼承順序會影響最終繼承的結果 |
必須使用新式類,解決了類間繼承順序問題 |
| / |
例如:1/2,2.x輸出的值為0 |
例如:1/2 3.x輸出的值為0.5 |
2.python資料類型
int 整型,如1,123,1234,-1,-123...,範圍在-2**31~2**31-1之間,取決於作業系統,不會小於這個範圍。
float 浮點型,如1.1,1.12,-1.1,-1.12...
str 字串,如'hello','123','abc'...字串需要使用單引號或者雙引號引起來。
bool 布爾類型,只有兩個值,真:True,假:False,任何非零的資料類型,結果都為真,結果為0時,則為False。
long 這個類型只存在2.x版本,取值範圍無限大,取決於可用的虛擬記憶體。
complex 複數,如3.12j,2.45e-6j...
元組(tuple) 如(‘1’,‘abc’,'hello')。
列表(list) 如['a','abc','python']。
字典(dict) 如{'name':'tom', 'age':'20', 'job':'IT'}。
3.python編碼
python 2.x版本預設string字元編碼,1個字元只能存8bit,可以使用內建函數,chr()和ord()進行字元轉換。
python 3.x版本預設使用unicode編碼格式,可以使用內建函數unichr()和ord()進行字元轉換。
4.python命名規範
python變數名(標識符)只能以字母或底線開頭,且不能包含特殊字元,注意python保留關鍵字不能當作變數名,這樣等於重寫python的內建方法,可能會影響其他方法的調用,具體python保留字,見4.1小節內容。
為了書寫規範,建議變數名使用統一的風格書寫,例如:駝峰是 TestLoginSucess 或者test_login_success。
單個前置底線開頭的標識符,意味著約定為私人的。
兩個前置底線開頭的標識符,表示強烈專用的標識符。
如果標識符還有兩個底線結束,則該標識符是語言的特殊名稱。
另外需要說明的是Python是動態預先,也即是說在定義變數的時候不用指定變數的的資料類型,Python會在個變數賦值的時候自動改變變數的資料類型。
4.1python保留字
#通過匯入keyword模組,我們可以查看當前python保留了哪些關鍵字import keyword#查看python保留關鍵字keyword.kwlist#2.x輸出['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']#3.x輸出['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']#注意,3.x新增了['False','None','True','nonlocal']同時去除了2.x ['exec']的關鍵字,大家在命名規範時,應該遵循3.x的關鍵字,便於向後相容#如果不確定該變數命名是否為關鍵字,也可以通過下面這種方法,檢查是否為關鍵字keyword.iskeyword('name')#返回False,則說明該變數不是系統保留關鍵字,即可用View Code
5.python注釋
python有兩種注釋方式,一種是單行注釋,在語句前加#符號,也可以使用多行注釋,使用連續的三個單引號在需要注釋的內容約制兩側添加,也可以使用連續的三個雙引號。
例:
'''
單引號注釋
'''
"""
雙引號注釋
"""
6.python的文法
python以簡潔著稱,摒棄了其他如c的{}花括弧書寫方式,以及未來追求語言的可讀性,強制要求文法縮排,同一個語句塊的代碼縮排必須相同,負責會出現縮排錯誤IndentationError,如果想一行寫多條語句,可以使用分好;隔開
7.python運算子
7.1算術運算子
算術運算子
| 運算子 |
描述 |
樣本 |
| + |
加法 |
>>> 14 - 5 9 |
| - |
減法 |
>>> 14 - 59 |
| * |
乘法 |
>>> 5 * 1470 |
| / |
除法 |
>>> 14 / 52.8 |
| % |
模數,即兩個的數商的餘數部分 |
>>> 14 % 54 |
| ** |
冪運算 |
>>> 2 ** 38 |
| // |
整除,返回兩個數的商的整數部分 |
>>> 10 // 33 |
7.2比較子:比較子不局限於數字,字串、列表等都可以
比較子
| 運算子 |
描述 |
樣本 |
| == |
判斷兩個對象是否相等(相等返回True,不相等返回False) |
>>> 'abc' == 'abc'True |
| != |
判斷連個對象是否不相等(與==相反,相等返回False,不相等返回True) |
>>> 1 != 2True |
| <> |
判斷連個對象是否不相等(同上,但不建議使用) |
|
| > |
判斷第一對象是否大於第二個對象,大於返回True,不大於(包括等於)返回Fasle |
>>> 3 > 1True |
| < |
判斷第一對象是否小於第二個對象,小於返回True,不小於(包括等於)返回Fasle |
>>> 3 < 4True |
| >= |
判斷第一個對象是否大於等於第二個對象,大於等於則返回True,否則返回False |
>>> 3 >= 3True |
| <= |
判斷第一個對象是否小於等於第二個對象,小於等於則返回True,否則返回False |
>>> 3 <= 4True |
7.3賦值運算子:進行賦值運算
賦值運算子
| 運算子 |
描述 |
樣本 |
| = |
賦值 |
a = c |
| += |
自加賦值 a += 1等價於 a = a + 1 |
a += 1 |
| -= |
自減賦值 a -= 1等價於 a = a - 1 |
a -= 1 |
| *= |
自乘賦值 a *= 1等價於 a = a * 1 |
a *= 1 |
| /= |
自除賦值 a /= 1等價於 a = a / 1 |
a /= 1 |
| %= |
自模數賦值 a %= 1等價於 a = a % 1 |
a %= 1 |
| **= |
自求冪賦值 a **= 1等價於 a = a ** 1 |
a**= 1 |
| //= |
自整除賦值 a //= 1等價於 a = a // 1 |
a //= 1 |
7.4位元運算符:按二進位位進行邏輯計算
位元運算符
| 運算子 |
描述 |
樣本 |
| & |
按位與 |
>>> 5 & 144 |
| | |
按位或 |
>>> 5 | 1415 |
| ^ |
異或 |
>>> 5 ^ 1411 |
| << |
左移 |
>>> 14 << 256 |
| >> |
右移 |
>>> 14 >> 23 |
8.python的資料類型操作
8.1變數和常量
變數是用來儲存程式運行期間需要臨時儲存可以不斷改變的資料的標識符,python有自身的記憶體回收機制,所以在開發過程中不用考慮變數的銷毀等。
python和其他靜態語言如C等不同的是,python的變數在賦值的時候解譯器現在記憶體中建立資料對象,然後再建立變數,並把變數指向之前建立的資料對象。有點像C語言的指標,所以也有人說python雖然沒有指標的概念,但一切皆指標
8.2變數的賦值操作
a = 2 #給a變數賦值為2b = a #將變數a 的值賦給變數b,相當於是將a指向的記憶體空間3同時指向了b,此時b也等於3a = 5 #給a變數賦值為5,此時由於之前的a已經被賦予一次值,python解譯器會將a指向的記憶體空間改為指向5print(a,b)(5,2)#此時列印輸出為5,2,因為雖然b=a,且a的值被改變了,但是b=a僅僅只是將b指向了a指向的記憶體位址,並不是真正意義上的指向a,a的值改變,僅僅是改變a指向的記憶體位址,當多個變數指向同一個地址空間時,python自身的記憶體回收機制,會在這塊記憶體空間做一個標記,有多少個人引用了這塊記憶體空間,就在+多少個1,直到引用為0,此時python解譯器會將該記憶體空間收回,這也是有別於其他開發語言的最大特點之一,不需要關注記憶體的回收,
View Code
#當想查看當前的兩個變數是否指向同一個記憶體位址時,可以使用id()方法a = 2print(id(a))#列印結果為 140723441682448b = aprint(id(b))#列印結果為 140723441682448#可見,a和b指向的都是同一塊地址空間,註:以上兩個值與使用的平台有關,不一定都是一樣的數值,但是這兩個數值一定是相等的a = 5print(id(a))#列印結果為 140723441682376print(id(b))#列印結果為 140723441682448#通過觀察兩個變數的指標變化,可以發現,a值的改變並不會影響到已經被賦值的b
View Code