天天看點

python系列(二)python變量指派與運算符

部落客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比較運算符 [==,!=,&lt;&gt;,&gt;,&lt;,&gt;=,&lt;=]

  12、python指派運算符 [=,+=,-+,*=,/=,%=,**=,//=]

  13、python位運算符 [&amp;,|,^,&gt;&gt;,&lt;&lt;]

  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互動式指令行又回到&gt;&gt;&gt;狀态了。那我們剛才輸入的内容到哪去了?答案是存放到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比較運算符

  ==:等于,一般用于比較兩個對象是否相等

  !=:不等于,比較兩個對象是否不相等

  &lt;&gt;:不等于,和!=類似

  &gt;:大于

  &lt;:小于

  &gt;=:大于等于

  &lt;=:小于等于

比較運算符一般用在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系列版本裡面,取消了“&lt;&gt;”這個運算符,隻保留了“!=”,大家使用的時候需要特别注意!

注意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位運算符

 ①&amp;  按位與運算符:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0 二進制解釋:

設定變量a=5,b=3

二進制:

例:a = 0101

    b = 0011

   a&amp;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>

⑤&lt;&lt;  左移動運算符:運算數的各二進位全部左移若幹位,由"&lt;&lt;"右邊的數指定移動的位數,不夠的位數補0。二進制解釋:

設定變量:

  a=5

二進制表示:

  a=0101.

  a&lt;&lt;2 //向左移位,後面不夠的補0

  a=01 0100

即a=20

<a href="https://s3.51cto.com/wyfs02/M01/93/2E/wKioL1kJL_3zc8gQAABV4fTsrGo675.jpg" target="_blank"></a>

⑥&gt;&gt;  右移動運算符:把"&gt;&gt;"左邊的“運算數”的各二進位全部“右移”若幹位,"&gt;&gt;"右邊的數指定移動的位數 ,高位丢棄,二進制解釋:

設定變量a=5

   a=0101

2&gt;&gt;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運算符優先級

  以下表格列出了從最高到最低優先級的所有運算符:

運算符     描述

** 指數 (最高優先級)

~+ -      按位翻轉, 一進制加号和減号 (最後兩個的方法名為 +@ 和 -@)

*/ % //   乘,除,取模和取整除

+-    加法減法

&gt;&gt;&lt;&lt;   右移,左移運算符

&amp; 位 'AND'

^|     位運算符

&lt;=&lt; &gt; &gt;=  比較運算符

&lt;&gt;== !=    等于運算符

=%= /= //= -= += *= **=  指派運算符

isis not  身份運算符

innot in  成員運算符

notor and  邏輯運算符

注1:這很像我們國小時候學習混合運算一樣,口訣是:

有括号先算括号裡面的,沒括号的話就先算乘除後算加減。

注2:一般常用的就是[+,-,*,/],符合數學運算中的優先級,初此之外,**幂的優先級最高,運算符的優先級如上表示。

本文轉自Mr大表哥 部落格,原文連結:   http://blog.51cto.com/zpf666/1921366  如需轉載請自行聯系原作者