標籤:簡單 efi http 元組 處理 src erro code 分享
目錄
- 變數
- 運算子
- 算數運算子
- 賦值運算子
- 關係運算子
- 邏輯運算子
- 成員運算子
- 身份運算子
- 位元運算符
變數
變數即對某種類型資料實體的抽象,或者說給某個類型資料的實體起個名字。基本操作方式是var = xxx。=是賦值操作,注意,python裡面不需要像Java一樣的變數聲明
>>> [1,2,3,4,5,6]*3+[1,2,3]+[1,2,3,4,5,6][1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6]>>> A = [1,2,3,4,5,6]>>> print(A)[1, 2, 3, 4, 5, 6]>>> B = [1,2,3]>>> A * 3 + B + A[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6]>>> skill = [‘新月打擊‘,‘蒼白之瀑‘]
變數可以方便我們的操作。變數起名要規範
命名規範
- python規定變數可以以字母、底線開頭,由字母、數字、底線組成
>>> 0a = 2SyntaxError: invalid syntax>>> a2 = ‘f‘>>> _2ab=‘1‘
>>> bTraceback (most recent call last): File "<pyshell#12>", line 1, in <module> bNameError: name ‘b‘ is not defined>>> B[1, 2, 3]
>>> a = ‘1‘>>> a = 1>>> a = (1,2,3)>>> a = {1,2,3}
實值型別與參考型別
int、str、tuple是實值型別,是不可變的,每次賦值都會開闢新的空間進行儲存。list、set、dict是參考型別,每個變數類似於一個“指標”,指向一個固定位置,修改一個會影響另一個。
>>> a = {1,2,3}>>> b = a>>> a = 3>>> print(b){1, 2, 3}>>> a = [1,2,3,4,5]>>> b = a>>> a[0] = ‘1‘>>> print(a)[‘1‘, 2, 3, 4, 5]>>> print(b)[‘1‘, 2, 3, 4, 5]
進一步說明實值型別不可變。
>>> a = ‘hello‘>>> id(a)2166410629392>>> a = a + ‘ python‘>>> id(a)2166410595440>>> ‘python‘[0]‘p‘>>> ‘python‘[0]=‘m‘Traceback (most recent call last): File "<pyshell#33>", line 1, in <module> ‘python‘[0]=‘m‘TypeError: ‘str‘ object does not support item assignment
函數id()用於顯示某個變數在記憶體中的地址
>>> b = [1,2,3]>>> b.append(4)>>> print(b)[1, 2, 3, 4]>>> c = (1,2,3)>>> c.append(4)Traceback (most recent call last): File "<pyshell#11>", line 1, in <module> c.append(4)AttributeError: ‘tuple‘ object has no attribute ‘append‘
因為元組不可變,所以沒有追加元素等操作。list等可變所以能添加、刪除、修改。
>>> a = (1,2,3,[1,2,4])>>> a[2]3>>> a[3][1, 2, 4]>>> a[3][2]4>>> a = (1,2,3,[1,2,[‘a‘,‘b‘,‘c‘]])>>> a[3][2][1]‘b‘>>> a[2] = ‘3‘Traceback (most recent call last): File "<pyshell#26>", line 1, in <module> a[2] = ‘3‘TypeError: ‘tuple‘ object does not support item assignment>>> a[3][2] = ‘4‘>>> print(a)(1, 2, 3, [1, 2, ‘4‘])
這一組合例子中,因元組不可變而list可變,所以a[3]儲存的是一個不變的地址,地址裡的內容可變
運算子
算數運算子
包括常見的+,-,*,/,%等,冪運算python採用**來實現。其中要注意+,-和*在處理某些資料結構時的含義,如拼接,差集,複製等
>>> ‘hello‘+‘ world‘‘hello world‘>>> [1,2,3]*3[1, 2, 3, 1, 2, 3, 1, 2, 3]>>> 3 - 12>>> 3 / 21.5>>> 3 // 21>>> 5 % 21>>> 2 ** 24
賦值運算子
顧名思義,通過一些簡單的運算(甚至沒有),將資料賦予某個變數,操作的核心一定是落在賦值上
>>> c = 1>>> c = c + 1>>> print(c)2>>> c += 1>>> print(c)3>>> b = 2>>> a = 3>>> b += a>>> print(b)5>>> b -= a>>> print(b)2>>> b *= a>>> print(b)6
關係運算子
用於確定兩個元素大小關係的運算子號。python並不是只有數字類型才能做大小比較
>>> 1 > 1False>>> 1 >= 1True>>> a = 1>>> b = 2>>> a != bTrue>>> ‘a‘ > ‘b‘False>>> ‘abc‘ < ‘abd‘True>>> [1,2,3] < [1,3,2]True>>> (1,2,3) > (4,5,6)False
單個字元比較ASCII碼,字串比較大小是對每一個對位字元進行大小比較。關係運算的重點是運算完成後返回的Boolean值
邏輯運算子
特點:操作布爾值,返回布爾值。操作只有三種:與、或、非
>>> True and TrueTrue>>> True and FalseFalse>>> True or FalseTrue>>> False or FalseFalse>>> not FalseTrue
對於非布爾類型的判定方法:
- 對於int、float等數實值型別,非0表示True,0表示False
- 對於字串,非空表示True,空表示False
- 對於“組”,list、set等來說。非空表示True,空表示False
>>> 1 and 11>>> ‘a‘ and ‘b‘‘b‘>>> ‘a‘ or ‘b‘‘a‘>>> not ‘a‘False>>> not []True>>> not [1,2]False
not操作返回的是顯性的True和False。但and和or不一定
>>> not []True>>> not [1,2]False>>> [1] or [][1]>>> 1 and 00
and和or結果顯示遵循“掃描原則”,若當前位已能決定結果則返回當前位,否則繼續
>>> 0 and 10>>> 1 and 22>>> 2 and 11>>> 0 or 11>>> 1 or 01>>> 1 or 21
成員運算子
包括in和not in兩個操作,用於判斷成員是否屬於某一個組
>>> a = 1>>> a in [1,2,3,4,5]True>>> b = 6>>> b in [1, 2,3,4]False>>> b not in (1,2,3,4,5)True>>> b not in {1,2,3,4,5}True
對於字典(dict)類型,in和not in操作比對的是key鍵
>>> b = ‘a‘>>> b in {‘c‘:1}False>>> b = 1>>> b in {‘c‘:1}False>>> b = ‘c‘>>> b in {‘c‘:1}True
身份運算子
包括is和not is。用於判斷符號左右兩端是否“身份”相同
>>> a = 1>>> b = 1>>> a is bTrue>>> a = 2>>> a is bFalse>>> a = ‘hello‘>>> b = ‘world‘>>> a is bFalse
初看上述這些判別會誤以為他和關係運算子(==)相同。但看下例會發現不同
>>> a = 1>>> b = 1.0>>> a is bFalse>>> a == bTrue
身份運算子所謂“身份”,其實核對的是記憶體位址是否相同,不關心值是否相同,簡單粗暴的說就是比對id()值是否相同
>>> a = 1>>> b = 1>>> id(a)1429827040>>> id(b)1429827040>>> a is bTrue>>> a == bTrue>>> b = 1.0>>> id(b)2354290105056>>> a is bFalse>>> a == bTrue
對於set、tuple等也同樣可以使用身份運算子
>>> a = {1,2,3}>>> b = {2,1,3}>>> a is bFalse>>> a == bTrue>>> a = (1,2,3)>>> b = (2,1,3)>>> a is bFalse>>> a == bFalse
因為集合的無序性所以關係比較是相同的,元組無此特性故而關係比較結果為False。同時因為每一個的記憶體位址都是特異的,所以他們都是身份獨立的,互不相同。
對象三大特徵
python中一切皆對象
- 值 value,==
- 身份
id(),is
- 類型
type(),isinstance
值和身份判斷上文已講,這裡說明一下類型判斷
>>> a =‘hello‘>>> type(a) == intFalse>>> type(a) == strTrue>>> isinstance(a,str)True>>> isinstance(a,int)False>>> isinstance(a,(int,str,float))True>>> isinstance(a,(int,float))False
類型判斷就是為了判定類型,可以用type(x)==bb方式,但更推薦isinstance(x,(aa,bb,...))方法,二者都返回布爾值。但後者可以判斷x的子類是否屬於某一種類型,而type()不行
位元運算符
主要以按位與&和按位或|為代表,將數字當做二進位然後以每一位為獨立單位進行運算(位元運算)。
>>> a = 2>>> b = 3>>> a & b2>>> a = 2>>> b = 3>>> a | b3
這裡的與和或操作同中學數學,&操作中當有一個為0時,結果為0。|操作中當有一個為1時,結果為1
>>> a = 1>>> ~a-2>>> a << 12>>> a = 3>>> a >> 11
~(非)按位取反操作涉及到二進位補碼,如上例所示。負數表示為符號位+補碼,擷取其表示數需要摘出符號位(0為正,1為負),剩餘部分取反加一。
>>和<<是對每一位進行移位元運算,規則是向右移動時,高位補符號位,向左移動時,低位補0
Python學習之路--02變數與運算子