部落客QQ:819594300
有什麼疑問的朋友可以聯系部落客,部落客會幫你們解答,謝謝支援!
本博文閱讀目錄:
<b> </b>1、什麼是變量?
2、命名規則
3、變量指派在記憶體中的原理
4、輸入與輸出[input raw_input,print]
5、常量
6、常用資料類型[整數,浮點數,布爾值,空值]
7、字元串與字元串格式化[%s,%d,%f,%x ]
8、編碼 [ASCII,unicode,UTF-8]
9、注釋 [#,’’’]
10、python算術運算符 [+,-,*,/,//,%,**]
11、python比較運算符 [==,!=,<>,>,<,>=,<=]
12、python指派運算符 [=,+=,-+,*=,/=,%=,**=,//=]
13、python位運算符 [&,|,^,>>,<<]
14、python邏輯運算符 [or,and,not]
15、python成員運算符 [in,not in]
16、python身份運算符 [is,is not]
17、python運算符優先級
正文部分
一、變量指派
1、什麼是變量?
變量就是存儲了一個值(就是與變量相關聯的資訊),代表或引用某個值的一個命名。通常使用“變量=值”的方式給變量指派。
2、命名規則
變量名隻能包括字母、數字和下劃線。
變量名可以使用字母或者下劃線開頭,但不能以數字開頭。
變量名不能包含空格,但可以使用下劃線來分隔其中的單詞。
不能使用關鍵字作為變量名(即用上面的查詢方法可以查詢到 哪個是關鍵字,變量命名要避免使用關鍵字)
不要使用函數名作為變量名
變量名應該即簡短又具有描述性
慎用小寫字母i和大寫字母O,應該易被當做數字1和0
建議不要使用大寫字母,雖然可以用,但是大寫字母不易識别
3、變量指派在記憶體中的原理
<a href="https://s2.51cto.com/wyfs02/M02/93/2E/wKioL1kJL8Og4HIuAAA7KHYjC3M855.jpg" target="_blank">例如:</a>
Python解釋器此時已經幹了兩件事。
第一件事:在記憶體中建立了一個“NB”的字元串;
第二件事:在記憶體中建立了一個名為dabiaoge的變量,并把它指向”NB”。
其實呢,也可以把dabiaoge變量指派給另外一個變量pengfei,這其實上是把變量pengfei指向變量dabiaoge這個變量所指向的資料“NB”。如下所示:
<a href="https://s2.51cto.com/wyfs02/M01/93/2E/wKioL1kJL8TyzTjRAACfNIuL1f4867.jpg" target="_blank"></a>
接下來又一個問題,如果改變了dabiaoge變量的指派,那麼變量pengfei下的值是不是也跟着改變了呢,我們看一下:
<a href="https://s5.51cto.com/wyfs02/M02/93/30/wKiom1kJL8TRCJNGAACWxtQj4Ng488.jpg" target="_blank"></a>
上圖所示,無論變量dabiaoge再怎麼改變指派,變量pengfei的指派,永遠不變。那怎麼讓變量pengfei也改變成dabiaoge的指派呢?
<a href="https://s5.51cto.com/wyfs02/M02/93/2E/wKioL1kJL8TCEgbkAACbu6iy5-E097.jpg" target="_blank"></a>
答案從上圖可以看出,就是重新把變量dabiaoge再賦予給變量pengfei一次就可以了。
上面的兩個例子中記憶體到底幹了什麼了呢?
執行pengfei =dabiaoge,解釋器建立了變量pengfei,并把pengfei指向dabiaoge指向的字元串”NB”;
執行dabiaoge=“dashen”,解釋器建立了字元串“dashen”,并把dabiaoge的指向改為“dashen”,但pengfei并沒有更改,依然指向的是“NB”
是以,最後列印pengfei的結果自然是NB了。
當再一次執行pengfei =dabiaoge,則記憶體重新把pengfei指向dabiaoge指向的新的字元串“dashen”,這樣再次列印pengfei的結果自然就是dashen了。
4、輸入與輸出
1)輸入(print)
<a href="https://s2.51cto.com/wyfs02/M00/93/30/wKiom1kJL8WxRIeMAABtuT4cncc414.jpg" target="_blank"></a>
如果輸出多個字元,可以使用“,“隔開,print()會依次列印每個字元串,遇到逗号“,”會輸出一個空格。(隻在3.0版本中生效)。
<a href="https://s2.51cto.com/wyfs02/M00/93/2E/wKioL1kJL8Xz4vDGAABx4v2vHsU172.jpg" target="_blank"></a>
注意:使用print時,在3.0版本中,必須使用括号(),将輸出的内容擴起來,在2.7版本中不存在此問題,直接‘’輸出内容即可。也可以使用()。
print()列印整數,或者計算結果:
<a href="https://s1.51cto.com/wyfs02/M00/93/30/wKiom1kJL8aTVCN2AAEdStAzvYg196.jpg" target="_blank"></a>
2)輸入(input或者raw_input)
<a href="https://s1.51cto.com/wyfs02/M02/93/30/wKiom1kJL8bzvT1QAADdynYqFEs226.jpg" target="_blank"></a>
說明:當你輸入name =input()并按下回車後,Python互動式指令行就在等待你的輸入了。這時,你可以輸入任意字元,然後按回車後完成輸入。
輸入完成後,不會有任何提示,Python互動式指令行又回到>>>狀态了。那我們剛才輸入的内容到哪去了?答案是存放到name變量裡了。可以直接輸入name檢視變量内容了。
可以直接執行name看到内容,還可以用print()函數:
<a href="https://s4.51cto.com/wyfs02/M01/93/2E/wKioL1kJL8egb9_1AACiOehmeaY151.jpg" target="_blank"></a>
5、常量
說明:常量就是不能變的變量,在習慣上通常使用大寫的變量名表示常量。(常量是自定義的)
<a href="https://s4.51cto.com/wyfs02/M02/93/2E/wKioL1kJL8fABn8mAADyY6K_Xks722.jpg" target="_blank"></a>
6、常用資料類型
1)整數
Python可以處理任意大小的整數,當然包括負整數,在程式中的表示方法和數學上的寫法一模一樣,例如:1,100,-8080,0,等等。
2)浮點數
浮點數也就是小數。
整數和浮點數在計算機内部存儲的方式是不同的,整數運算永遠是精确的,而浮點數運算則可能會有四舍五入的誤差。
3)布爾值
布爾值和布爾代數的表示完全一緻,一個布爾值隻有True、False兩種值,要麼是True,要麼是False,在Python中,可以直接用True、False表示布爾值(請注意大小寫),也可以通過布爾運算計算出來。
<a href="https://s4.51cto.com/wyfs02/M00/93/30/wKiom1kJL8iSfYELAACwrij_NIQ810.jpg" target="_blank"></a>
布爾值可以用and、or和not運算。
①and運算是與運算,隻有所有都為True,and運算結果才是True:
<a href="https://s4.51cto.com/wyfs02/M02/93/30/wKiom1kJL8nz-NrXAAFbmun91OU741.jpg" target="_blank"></a>
②or運算是或運算,隻要其中有一個為True,or運算結果就是True:
<a href="https://s5.51cto.com/wyfs02/M00/93/2E/wKioL1kJL8mBvE-aAADnyElbr4I032.jpg" target="_blank"></a>
③not運算是非運算,它是一個單目運算符,把True變成False,False變成True:
<a href="https://s5.51cto.com/wyfs02/M02/93/2E/wKioL1kJL8rg5UoRAADvBPyil-8150.jpg" target="_blank"></a>
布爾值經常用在條件判斷中,比如:
<a href="https://s5.51cto.com/wyfs02/M00/93/30/wKiom1kJL8vDPJB_AADdYz9_aW8675.jpg" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M00/93/2E/wKioL1kJL8uDpVELAACeMsOTXls314.jpg" target="_blank"></a>
4)空值
空值是Python裡一個特殊的值,用None表示。None不能了解為0,因為0是有意義的,而None是一個特殊的空值。
此外,Python還提供了清單、字典等多種資料類型,還允許建立自定義資料類型,我會在後續的博文發表中講到。
<a href="https://s2.51cto.com/wyfs02/M01/93/30/wKiom1kJL8zgJXdCAACno5t5UnI660.jpg" target="_blank"></a>
7、字元串與字元串格式化
1)字元串
字元串是以單引号'或雙引号"括起來的任意文本
如果字元串内部既包含'又包含"怎麼辦?
①如果字元串内容中包含‘單引号可以使用“”雙引号,将内容包含
例:包含’單引号:
<a href="https://s2.51cto.com/wyfs02/M01/93/2E/wKioL1kJL83ieXVAAAE_-S6Mdag016.jpg" target="_blank"></a>
②如果字元串内容中包含“雙引号可以使用’’’三個單引号或者’單引号,将内容包含
例:包含“雙引号:
<a href="https://s4.51cto.com/wyfs02/M01/93/30/wKiom1kJL83ijGLcAAG53X4v25M990.jpg" target="_blank"></a>
2)使用轉義符
<a href="https://s2.51cto.com/wyfs02/M01/93/2E/wKioL1kJL86T4upNAABY-iB5TCQ480.jpg" target="_blank"></a>
如果字元串裡面有很多字元都需要轉義,就需要加很多\,這樣很不友善檢視,為了簡化,Python還允許用r''表示''内部的字元串預設不轉義:
<a href="https://s2.51cto.com/wyfs02/M02/93/30/wKiom1kJL86g7wjWAABjLZh-w6I580.jpg" target="_blank"></a>
如果字元串内部有很多換行,用\n寫在一行裡不好閱讀,為了簡化,Python允許用 '''……''' 的格式表示多行内容:
<a href="https://s2.51cto.com/wyfs02/M02/93/30/wKiom1kJL8_QQEHKAADRWuuMz7Q787.jpg" target="_blank"></a>
3)字元格式化
%運算符就是用來格式化字元串的。
在字元串内部,
%s表示用字元串替換;
%d表示用整數替換。
有幾個%?占位符,後面就跟幾個變量或者值,順序要對應好。如果隻有一個%?,括号可以省略。
常見的占位符有:
%d 整數
%f 浮點數
%s 字元串
%x 十六進制整數
例如:
<a href="https://s2.51cto.com/wyfs02/M02/93/2E/wKioL1kJL8_xHcHKAACqSaefwT4245.jpg" target="_blank"></a>
注釋:%s表示用最後%定義的world替換
<a href="https://s3.51cto.com/wyfs02/M00/93/30/wKiom1kJL9Cx7NnnAADteAu89Lg993.jpg" target="_blank"></a>
4)格式化整數
格式化整數和浮點數還可以指定是否補0和整數與小數的位數:
<a href="https://s3.51cto.com/wyfs02/M00/93/2E/wKioL1kJL9DSZeS2AAGg3fnKu0s386.jpg" target="_blank"></a>
%3d:代表整數替換,具有三個占位符。不過後面定義的值中如果位數超過三個,還是會輸出全部,隻是表示未超出指定位數的表示。
%3d:表示整數有3個占位符,如果某個占位符中沒有值,是否補0,如1隻有一個位數,是以在1前加了兩個0表示。
5)格式化整數與小數的位數:
<a href="https://s5.51cto.com/wyfs02/M01/93/30/wKiom1kJL9HSZD_kAACFNxpBJFg926.jpg" target="_blank"></a>
注意:.2f是取小數點後2位。
注:如果你不太确定應該用什麼,%s永遠起作用,它會把任何資料類型轉換為字元串:
<a href="https://s5.51cto.com/wyfs02/M01/93/2E/wKioL1kJL9Lib245AAD_2gc8G-M848.jpg" target="_blank"></a>
字元串裡面的%是一個普通字元怎麼辦?這個時候就需要轉義,用%%來表示一個%:
<a href="https://s5.51cto.com/wyfs02/M00/93/2E/wKioL1kJL9OAGc-VAADNRDanNAQ206.jpg" target="_blank"></a>
8、編碼
首先要知道一個概念:
計算機隻能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。
最早的計算機在設計時采用8個比特(bit)作為一個位元組(byte),是以,一個位元組能表示的最大的整數就是255=28(二進制11111111轉換為十進制=255),如果要表示更大的整數,就必須用更多的位元組。比如兩個位元組可以表示的最大整數是216,用65535表示,4個位元組可以表示的最大整數是232用4294967295表示。
在ASCII編碼中,65-90為26個大寫英文字母,97-122為26個小寫字母。
大寫A的編碼是65,小寫字母z的編碼為122。
是要進行中文顯然一個位元組是不夠的,至少需要兩個位元組,而且還不能和ASCII編碼沖突,是以,中國制定了GB2312編碼,用來把中文編進去。
你可以想得到的是,全世界有上百種語言,日本把日文編到Shift_JIS裡,南韓把韓文編到Euc-kr裡,各國有各國的标準,就會不可避免地出現沖突,結果就是,在多語言混合的文本中,顯示出來會有亂碼。
是以,Unicode應運而生。Unicode把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。
Unicode标準也在不斷發展,但最常用的是用兩個位元組表示一個字元(如果要用到非常偏僻的字元,就需要4個位元組)。現代作業系統和大多數程式設計語言都直接支援Unicode。
現在,捋一捋ASCII編碼和Unicode編碼的差別:
ASCII編碼是1個位元組,而Unicode編碼通常是2個位元組。
字母A用ASCII編碼是十進制的65,二進制的01000001;
字元0用ASCII編碼是十進制的48,二進制的00110000,注意字元'0'和整數0是不同的;
漢字中已經超出了ASCII編碼的範圍,用Unicode編碼是十進制的20013,二進制的01001110 00101101。
你可以猜測,如果把ASCII編碼的A用Unicode編碼,隻需要在前面補0就可以,是以,A的Unicode編碼是00000000 01000001。
新的問題又出現了:如果統一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲空間,在存儲和傳輸上就十分不劃算。
是以,本着節約的精神,又出現了把Unicode編碼轉化為“可變長編碼”的UTF-8編碼。UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成1個位元組,漢字通常是3個位元組,隻有很生僻的字元才會被編碼成4-6個位元組。如果你要傳輸的文本包含大量英文字元,用UTF-8編碼就能節省空間:
UTF-8編碼有一個額外的好處,就是ASCII編碼實際上可以被看成是UTF-8編碼的一部分,是以,大量隻支援ASCII編碼的曆史遺留軟體可以在UTF-8編碼下繼續工作。
搞清楚了ASCII、Unicode和UTF-8的關系,我們就可以總結一下現在計算機系統通用的字元編碼工作方式:
在計算機記憶體中,統一使用Unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼。
用記事本編輯的時候,從檔案讀取的UTF-8字元被轉換為Unicode字元到記憶體裡,編輯完成後,儲存的時候再把Unicode轉換為UTF-8儲存到檔案:
注意:如果在編寫python腳本中,需要使用中文,必須指定編碼:
Python2.x版本不支援中文,在寫腳本時需要指定編碼格式:
<a href="https://s3.51cto.com/wyfs02/M01/93/30/wKiom1kJL9PSYMSEAACwlZvT-YU855.jpg" target="_blank"></a>
執行結果如下:
<a href="https://s3.51cto.com/wyfs02/M02/93/30/wKiom1kJL9Th6HsZAACDKHYOEHs185.jpg" target="_blank"></a>
如果不指定這一行會怎麼樣呢,答案是會報錯:
<a href="https://s5.51cto.com/wyfs02/M01/93/2E/wKioL1kJL9SQ-zA7AAC04yJpWq4594.jpg" target="_blank"></a>
9、注釋
①單行注釋格式:
#注釋内容
②多行注釋格式:
‘’’注釋内容’’’
10、Python算術運算符
假設a=15 b=200
<a href="https://s5.51cto.com/wyfs02/M02/93/30/wKiom1kJL9Wi_cldAAJW7RwYADE567.jpg" target="_blank"></a>
+:加
-:減
*:乘
/:除
%:隻取餘數
**:幂次方
//:隻取商,舍棄餘數,如果被除數和除數是浮點數,則,取的商也是以浮點數形式顯示,例如下面的例子:
<a href="https://s5.51cto.com/wyfs02/M02/93/2E/wKioL1kJL_rD9illAABAQ-Qd7R8080.jpg" target="_blank"></a>
11、python比較運算符
==:等于,一般用于比較兩個對象是否相等
!=:不等于,比較兩個對象是否不相等
<>:不等于,和!=類似
>:大于
<:小于
>=:大于等于
<=:小于等于
比較運算符一般用在if語句中,比如下面的例子:
(下面的例子用的是python2.7版本)
<a href="https://s5.51cto.com/wyfs02/M00/93/30/wKiom1kJL_vR8d1lAAJdebmCpGg324.jpg" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M02/93/2E/wKioL1kJL_vjLg14AADUkW3l0Ug064.jpg" target="_blank"></a>
注意1:在python3.0系列版本裡面,取消了“<>”這個運算符,隻保留了“!=”,大家使用的時候需要特别注意!
注意2: if要以:結尾,else也要以:結尾,這是和shell的差別。
12、python指派運算符
= 簡單的指派運算符 c = a + b 将 a + b 的運算結果指派為 c
+= 加法指派運算符 c += a 等效于 c = c + a
-= 減法指派運算符 c -= a 等效于 c = c - a
*= 乘法指派運算符 c *= a 等效于 c = c * a
/= 除法指派運算符 c /= a 等效于 c = c / a
%= 取模指派運算符 c %= a 等效于 c = c % a
**= 幂指派運算符 c **= a 等效于 c = c **a
//= 取整除指派運算符 c //= a 等效于 c = c // a
13、python位運算符
①& 按位與運算符:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0 二進制解釋:
設定變量a=5,b=3
二進制:
例:a = 0101
b = 0011
a&b=0001
<a href="https://s5.51cto.com/wyfs02/M00/93/30/wKiom1kJL_zxFhnkAABlcFzrero139.jpg" target="_blank"></a>
②| 按位”或”運算符:隻要對應的二個二進位有一個為1時,結果位就為1,二進制解釋:
設定變量: a=5,b=3
例:a=0101
b=0011
a|b=0111
<a href="https://s5.51cto.com/wyfs02/M00/93/2E/wKioL1kJL_zx-MEaAABdlpY9zvo322.jpg" target="_blank"></a>
③^ 按位異或運算符:當兩對應的二進位相異時,(不相同時)結果為1,二進制解釋:
例:a=5,b=3
a=0101
a^b=0101110
<a href="https://s5.51cto.com/wyfs02/M01/93/30/wKiom1kJL_zAvNE-AABh7M-5FJw424.jpg" target="_blank"></a>
④~ 按位取反運算符:對資料的每個二進制位取反,即把1變為0,把0變為1 二進制解釋: 在一個有符号二進制數的補碼形式。
公式是:~a =-(a+1)
~a =-(a+1)
<a href="https://s5.51cto.com/wyfs02/M00/93/2E/wKioL1kJL_3QM8NgAABErcRVOws099.jpg" target="_blank"></a>
⑤<< 左移動運算符:運算數的各二進位全部左移若幹位,由"<<"右邊的數指定移動的位數,不夠的位數補0。二進制解釋:
設定變量:
a=5
二進制表示:
a=0101.
a<<2 //向左移位,後面不夠的補0
a=01 0100
即a=20
<a href="https://s3.51cto.com/wyfs02/M01/93/2E/wKioL1kJL_3zc8gQAABV4fTsrGo675.jpg" target="_blank"></a>
⑥>> 右移動運算符:把">>"左邊的“運算數”的各二進位全部“右移”若幹位,">>"右邊的數指定移動的位數 ,高位丢棄,二進制解釋:
設定變量a=5
a=0101
2>>a=0001 ##去掉01 //向右移位,前面不夠的補0,後面的丢掉
<a href="https://s2.51cto.com/wyfs02/M01/93/30/wKiom1kJL_2QKf5DAABDkZVMLWk623.jpg" target="_blank"></a>
14、python邏輯運算符
①and :倆個值都相等時才滿足條件,傳回結果
<a href="https://s3.51cto.com/wyfs02/M01/93/2E/wKioL1kJL_6Qw8pcAAE_nrX8AT4287.jpg" target="_blank"></a>
②or:一個條件滿足,就傳回前面的結果
<a href="https://s2.51cto.com/wyfs02/M02/93/30/wKiom1kJL_6BVQSZAADu2S61rVA988.jpg" target="_blank"></a>
③not:非,取反的意思
<a href="https://s2.51cto.com/wyfs02/M02/93/2E/wKioL1kJL_6TMeJ1AADeGx9-Tck947.jpg" target="_blank"></a>
15、python成員運算符
in: 在指定的序列中找到值傳回True
not in :在指定的序列中沒有找到值傳回True
<a href="https://s1.51cto.com/wyfs02/M02/93/30/wKiom1kJL__hKrvrAAE-VwnrYxU003.jpg" target="_blank"></a>
16、python身份運算符
is:比較兩個辨別符是不是引用來自一個對象
isnot :表交兩個辨別符是不是引用來自不同對象
<a href="https://s1.51cto.com/wyfs02/M02/93/2E/wKioL1kJL_-ChSXvAAC3bPhILNg353.jpg" target="_blank"></a>
17、python運算符優先級
以下表格列出了從最高到最低優先級的所有運算符:
運算符 描述
** 指數 (最高優先級)
~+ - 按位翻轉, 一進制加号和減号 (最後兩個的方法名為 +@ 和 -@)
*/ % // 乘,除,取模和取整除
+- 加法減法
>><< 右移,左移運算符
& 位 'AND'
^| 位運算符
<=< > >= 比較運算符
<>== != 等于運算符
=%= /= //= -= += *= **= 指派運算符
isis not 身份運算符
innot in 成員運算符
notor and 邏輯運算符
注1:這很像我們國小時候學習混合運算一樣,口訣是:
有括号先算括号裡面的,沒括号的話就先算乘除後算加減。
注2:一般常用的就是[+,-,*,/],符合數學運算中的優先級,初此之外,**幂的優先級最高,運算符的優先級如上表示。
本文轉自Mr大表哥 部落格,原文連結: http://blog.51cto.com/zpf666/1921366 如需轉載請自行聯系原作者