註釋:#標註的文本;
數字:
整數,不區分long和int,進制:0xa、0o10、0b10;
浮點數,1.4be9等價於1.46*10^9;
複數:1+2j(a+bj);
字符串:
使用'、''引用的字符的序列;
'''、""",可跨行,可在其中自由的使用單雙引號;
在字符串前加上r或R前綴,表示該字符串不作特殊處理,前綴r會把裏面的所有字符當普通字符對待;
轉義序列:
\\
\t
\r
\n
\'
\"
縮進:
約定使用4個空格;
未使用c語言的花括號,而是採用縮進的方式表示層次關係;
續行:
在行尾使用\;
如果使用各種括號,認爲括號內是一個整體,內部跨行不用\;
標識符:
一個名字,用來指定一個值;
只能字母、下劃線、數字;
只能以字母或下劃線開頭;
不能是python的關鍵字,如def、class等;
大小寫敏感;
約定:不允許使用中文;不允許使用歧義單詞,如class_;在python中不要隨便使用下劃線開頭的標識符;
常量:
一旦賦值就不能改變值的標識符;
python中無法定義常量;
字面常量:
一個單獨的量,如12、'abc'、'234123.03e-9';
變量:
賦值後,可以改變值的標識符;
python的語言類型:
python是動態語言、強類型語言;
靜態編譯語言:
事先聲明變量類型,類型不能改變;
編譯時檢查;
動態編譯語言:
不用事先聲明類型,隨時可賦值爲其它類型;
編程時不知道是什麼類型,很難推斷;
注:
賦值即定義(動態語言與靜態語言的差別);
強類型語言:
不同類型之間操作,必須先強制類型轉換爲同一類型,print('a' + 1);
弱類型語言:
不同類型之間可以操作,自動隱式轉換,js中console.log(1 + 'a');
operator運算符:
算術運算符:
+-*/%,**;
/自然除結果爲浮點數,//整除結果爲整數;
2.*版本中/和//都是整除;
2**3,2**0.5開方;
位運算符:
&|~^<<>>;
常用方式:乘除2的倍數,32//4相當於32>>2;
例:12,0xc,0o14,0b1100;
規律:~n的結果爲-(n+1);
注:
8421-->2^3,2^2,2^1,2^0
例:
~12,按位取反;
12-->0b00001100
取反後0b11110011 #符號位爲1則計算機認爲是負數,負數的補碼是符號位不變,其餘按位取反後加1;此處取反爲未知數X的補碼形式;
取反後0b10001100
加1爲0b10001101-->-13
原碼:
5-->0b101,1-->0b1,-1-->-0b1,bin(-1);
反碼:
正數的反碼,與原碼相同;
負數的反碼,符號位不變,其餘按位取反;
補碼:
正數的補碼,與原碼相同;
負數的補碼,符號位不變,其餘按位取反後加1;
例:
-7的補碼:
-7-->0b10000111
取反0b11111000
加1爲0b11111001
例:
-64的補碼:
-64-->0b11000000
取反0b10111111
加1爲0b11000000
負數表示法:
數字電路的cpu中的運算器實現了加法器,但是沒有減法器,減法是轉換成加法;
負數在計算機中使用補碼存儲,-1(-0b1)的補碼爲11111111,-1在內存中0xff;
5-1-->5+(-1),直覺上是0b101-0b1,其實計算機上是0b101+0b11111111,溢出位捨棄;
10^9和10^-9結果?
例:
10^9,^爲異或,異或相同爲0不同爲1:
10-->00001010
9-->00001001
結果爲00000011-->3
例:
10^-9:
10-->00001010
-9-->10001001
結果爲10000011-->131
比較運算符:
==,!=,<,>,<=,>=;
返回bool值;
1 < '1',不能比較,不可以用<、>、<=、>=比較不同類型;
1 == '1',==或!=可以比較不同類型,返回False;
邏輯運算符:
and,位相乘;
or,位相加;
not,非;
短路運算符:
and,如果第一個表達式爲False(乘法中的0),後面就沒有必要計算了,這個邏輯表達式一定False;
or,如果第一個表達爲True(加法中的1),後面就沒有必要計算了,這個邏輯表達式一定True;
賦值運算符:
a=min(3,5);
+=、-=、*=、/=、%=;
python中沒有++,--;
x=y=z=10,坑,少用;
成員運算符:
in
not in
身份運算符:
is
is not
運算符優先級:
算術運算符 > 位運算符 > 身份運算符 > 成員運算符 > 邏輯運算符;
單目運算符優先級 > 雙目運算符;
記不住,用括號;
長表達式用括號,多用括號,易懂易讀;
expression表達式:
由數字、符號、括號、變量等的組合;
算術表達式;
邏輯表達式;
賦值表達式,python中賦值即定義(排錯用),如果一個變量已經定義,賦值相當於重新定義;
內存管理:
變量無須事先聲明,也不需要指定類型(動態語言的特性);
編程中一般無須關心變量的存亡,也不用關心內存的管理;
python使用引用計數記錄所有變量的引用數(引用計數機制);
當變量引用計數變爲0,它就可以被GC;
計數增加,賦值給其它變量就增加引用計數,如x=3;y=x;
計數減少,函數運行結束時,局部變量就會被自動銷燬,對象引用計數減少;變量被賦值給其它對象,如x=3;y=x;x=4;
有關性能時,就需要考慮變量的引用問題,但是該釋放內存,還是儘量不釋放內存,看需求;
程序控制:
順序,按先後順序一條條執行,如先洗手再吃飯再洗碗;
分支,根據不同的情況判斷,條件滿足執行某條件下的語句,如先洗手,如果飯沒做好,玩遊戲,如果飯做好了,就吃飯,如果飯都沒有做,叫外賣;
循環,條件滿足就反覆執行,不滿足就不執行或不再執行,如先洗手,看飯做好了沒有,沒有好,一會來看一次是否好了,一會再來看一次,直到飯做好了,纔可以吃飯,這裏的循環條件是飯沒有好,飯沒有好,就循環的來看飯好了沒有;
單分支結構:
if condition: #condition必須是一個bool類型,此處有一個隱式轉換bool(condition)
block #冒號後面就是一個代碼塊,在if/for/def/class等後面
真值表:
"" | False |
"string" | True |
0 | False |
>=1 | True |
<=-1 | False |
() | False |
[] | False |
{} | False |
None | False |
多分支結構:
if...elif...else語句,elif可N次;
分支嵌套:
可以是分支、循環的嵌套;
可互相嵌套多層;
類三目運算符:
真值 if 條件 else 假值 #如果語句簡單(不超過3行),可用類三目運算符;
python中沒有三目運算符;
循環:
while condition: #condition爲True進入循環體,執行block
block
while True:爲死循環,while False:無用語句;
for element in interable: #當可迭代對象中有元素可以迭代,進入循環體,執行block
block
range函數,前包後不包,[0,10);
continue語句:
中斷當前循環的當次執行,繼續下一次循環;
在while和for中都可用;
例:
for i in range(10):
if i%2 == 0:
continue
print(i)
同
for i in range(10):
if i%2 == 0:
continue
else:
print(i)
最好使用第一種;
break語句:
終止當前循環;
else子句:
如果循環正常的執行結束,就執行else子句;
如果使用break終止,else子句不會執行;
注:
n=1
for i in range(1,10): #此處i可用_替代,表示不關心此變量,僅作爲循環次數使用
n=(n+1)*2
print(n)