天天看點

阿裡雲天池Python訓練營(第1天)Python入門(上)變量、運算符與資料類型位運算循環語句異常處理

Python入門(上)

變量、運算符與資料類型

1. 注釋

  • 在 Python 中,

    #

    表示注釋,作用于整行。
  • ''' '''

    或者

    """ """

    表示區間注釋,在三引号之間的所有内容被注釋

2. 運算符

算術運算符
操作符 名稱 示例

+

1 + 1

-

2 - 1

*

3 * 4

/

3 / 4

//

整除(地闆除)

3 // 4

%

取餘

3 % 4

**

2 ** 3

比較運算符
操作符 名稱 示例

>

大于

2 > 1

>=

大于等于

2 >= 4

<

小于

1 < 2

<=

小于等于

5 <= 2

==

等于

3 == 4

!=

不等于

3 != 5

邏輯運算符
操作符 名稱 示例

and

(3 > 2) and (3 < 5)

or

(1 > 3) or (9 < 2)

not

not (2 > 1)

位運算符
操作符 名稱 示例

~

按位取反

~4

&

按位與

4 & 5

|

按位或

4 | 5

^

按位異或

4 ^ 5

<<

左移

4 << 2

>>

右移

4 >> 2

三元運算符

【例子】

x, y = 4, 5
if x < y:
    small = x
else:
    small = y

print(small)  # 4
           
4
           

有了這個三元操作符的條件表達式,你可以使用一條語句來完成以上的條件判斷和指派操作。

【例子】

x, y = 4, 5
small = x if x < y else y
print(small)  # 4
           
其他運算符
操作符 名稱 示例

in

存在

'A' in ['A', 'B', 'C']

not in

不存在

'h' not in ['A', 'B', 'C']

is

"hello" is "hello"

not is

不是

"hello" is not "hello"

注意:

  • is, is not 對比的是兩個變量的記憶體位址
  • ==, != 對比的是兩個變量的值
  • 比較的兩個變量,指向的都是位址不可變的類型(str等),那麼is,is not 和 ==,!= 是完全等價的。
  • 對比的兩個變量,指向的是位址可變的類型(list,dict,tuple等),則兩者是有差別的。
運算符的優先級
  • 一進制運算符優于二進制運算符。例如

    3 ** -2

    等價于

    3 ** (-2)

  • 先算術運算,後移位運算,最後位運算。例如

    1 << 3 + 2 & 7

    等價于

    1 << (3 + 2)) & 7

  • 邏輯運算最後結合。例如

    3 < 4 and 4 < 5

    等價于

    (3 < 4) and (4 < 5)

3. 變量和指派

  • 在使用變量之前,需要對其先指派。
  • 變量名可以包括字母、數字、下劃線、但變量名不能以數字開頭。
  • Python 變量名是大小寫敏感的,foo != Foo。

4. 資料類型與轉換

類型 名稱 示例
int 整型

<class 'int'>

-876, 10

float 浮點型

<class 'float'>

3.149, 11.11

bool 布爾型

<class 'bool'>

True, False

整型

有時候我們想保留浮點型的小數點後

n

位。可以用

decimal

包裡的

Decimal

對象和

getcontext()

方法來實作。

布爾型

布爾 (boolean) 型變量隻能取兩個值,

True

False

。當把布爾型變量用在數字運算中,用

1

代表

True

False

除了直接給變量指派

True

False

,還可以用

bool(X)

來建立變量,其中

X

可以是

  • 基本類型:整型、浮點型、布爾型
  • 容器類型:字元串、元組、清單、字典和集合

    <class ‘str’> False True

    <class ‘tuple’> False True

    <class ‘list’> False True

    <class ‘dict’> False True

    <class ‘set’> False True

确定

bool(X)

的值是

True

還是

False

,就看

X

是不是空,空的話就是

False

,不空的話就是

True

  • 對于數值變量, ,

    0.0

    都可認為是空的。
  • 對于容器變量,裡面沒元素就是空的。
擷取類型資訊
  • 擷取類型資訊

    type(object)

注:

  • type()

    不會認為子類是一種父類類型,不考慮繼承關系。
  • isinstance()

    會認為子類是一種父類類型,考慮繼承關系。

如果要判斷兩個類型是否相同推薦使用

isinstance()

類型轉換

  • 轉換為整型

    int(x, base=10)

  • 轉換為字元串

    str(object='')

  • 轉換為浮點型

    float(x)

5. print() 函數

  • 将對象以字元串表示的方式格式化輸出到流檔案對象file裡。其中所有非關鍵字參數都按

    str()

    方式進行轉換為字元串輸出;
  • 關鍵字參數

    sep

    是實作分隔符,比如多個參數輸出時想要輸出中間的分隔字元;
  • 關鍵字參數

    end

    是輸出結束時的字元,預設是換行符

    \n

  • 關鍵字參數

    file

    是定義流輸出的檔案,可以是标準的系統輸出

    sys.stdout

    ,也可以重定義為别的檔案;
  • 關鍵字參數

    flush

    是立即把内容輸出到流檔案,不作緩存。

位運算

1. 原碼、反碼和補碼

二進制有三種不同的表示形式:原碼、反碼和補碼,計算機内部使用補碼來表示。

反碼:正數的反碼就是原碼,負數的反碼是符号位不變,其餘位取反(對應正數按位取反)。

補碼:正數的補碼就是原碼,負數的補碼是反碼+1。

符号位:最高位為符号位,0表示正數,1表示負數。在位運算中符号位也參與運算。

2. 按位運算

  • 按位非操作 ~
~ 1 = 0
~ 0 = 1
           

~

num

的補碼中的 0 和 1 全部取反(0 變為 1,1 變為 0)有符号整數的符号位在

~

運算中同樣會取反。

  • 按位與操作 &
  • 按位異或操作 ^

異或操作的性質:滿足交換律和結合律

  • 按位左移操作 <<

num << i

num

的二進制表示向左移動

i

位所得的值。

  • 按位右移操作 >>

num >> i

num

的二進制表示向右移動

i

位所得的值。

3. 利用位運算實作快速計算

通過

<<

>>

快速計算2的倍數問題。

通過

^

快速交換兩個整數。

通過

^

快速交換兩個整數。

4. 利用位運算實作整數集合

一個數的二進制表示可以看作是一個集合(0 表示不在集合中,1 表示在集合中)。

比如集合

{1, 3, 4, 8}

,可以表示成

01 00 01 10 10

而對應的位運算也就可以看作是對集合進行的操作。

【例子】 Python 的

bin()

輸出。

print(bin(3))  # 0b11
print(bin(-3))  # -0b11

print(bin(-3 & 0xffffffff))  
# 0b11111111111111111111111111111101

print(bin(0xfffffffd))       
# 0b11111111111111111111111111111101

print(0xfffffffd)  # 4294967293
           
0b11
-0b11
0b11111111111111111111111111111101
0b11111111111111111111111111111101
4294967293
           

條件語句

1. if 語句

if expression:
    expr_true_suite
           
  • if 語句的

    expr_true_suite

    代碼塊隻有當條件表達式

    expression

    結果為真時才執行,否則将繼續執行緊跟在該代碼塊後面的語句。
  • 單個 if 語句中的

    expression

    條件表達式可以通過布爾操作符

    and

    or

    not

    實作多重條件判斷。

2. if - else 語句

if expression:
    expr_true_suite
else:
    expr_false_suite
           
  • Python 提供與 if 搭配使用的 else,如果 if 語句的條件表達式結果布爾值為假,那麼程式将執行 else 語句後的代碼。

if

語句支援嵌套,即在一個

if

語句中嵌入另一個

if

語句,進而構成不同層次的選擇結構。

3. if - elif - else 語句

if expression1:
    expr1_true_suite
elif expression2:
    expr2_true_suite
    .
    .
elif expressionN:
    exprN_true_suite
else:
    expr_false_suite
           
  • elif 語句即為 else if,用來檢查多個表達式是否為真,并在為真時執行特定代碼塊中的代碼。

循環語句

1. while 循環

while

語句最基本的形式包括一個位于頂部的布爾表達式,一個或多個屬于

while

代碼塊的縮進語句。

while 布爾表達式:
    代碼塊
           

while

循環的代碼塊會一直循環執行,直到布爾表達式的值為布爾假。

如果布爾表達式不帶有

<、>、==、!=、in、not in

等運算符,僅僅給出數值之類的條件,也是可以的。當

while

後寫入一個非零整數時,視為真值,執行循環體;寫入

時,視為假值,不執行循環體。也可以寫入

str、list

或任何序列,長度非零則視為真值,執行循環體;否則視為假值,不執行循環體。

2. while - else 循環

while 布爾表達式:
    代碼塊
else:
    代碼塊
           

while

循環正常執行完的情況下,執行

else

輸出,如果

while

循環中執行了跳出循環的語句,比如

break

,将不執行

else

代碼塊的内容。

3. for 循環

for

循環是疊代循環,在Python中相當于一個通用的序列疊代器,可以周遊任何有序序列,如

str、list、tuple

等,也可以周遊任何可疊代對象,如

dict

for 疊代變量 in 可疊代對象:
    代碼塊
           

每次循環,疊代變量被設定為可疊代對象的目前元素,提供給代碼塊使用。

4. for - else 循環

for 疊代變量 in 可疊代對象:
    代碼塊
else:
    代碼塊
           

for

循環正常執行完的情況下,執行

else

輸出,如果

for

循環中執行了跳出循環的語句,比如

break

,将不執行

else

代碼塊的内容,與

while - else

語句一樣。

異常處理

異常就是運作期檢測到的錯誤。計算機語言針對可能出現的錯誤定義了異常類型,某種錯誤引發對應的異常時,異常處理程式将被啟動,進而恢複程式的正常運作。

1. Python 标準異常總結

  • BaseException:所有異常的 基類
  • Exception:正常異常的 基類
  • StandardError:所有的内建标準異常的基類
  • ArithmeticError:所有數值計算異常的基類
  • FloatingPointError:浮點計算異常
  • OverflowError:數值運算超出最大限制
  • ZeroDivisionError:除數為零
  • AssertionError:斷言語句(assert)失敗
  • AttributeError:嘗試通路未知的對象屬性
  • EOFError:沒有内建輸入,到達EOF标記
  • EnvironmentError:作業系統異常的基類
  • IOError:輸入/輸出操作失敗
  • OSError:作業系統産生的異常(例如打開一個不存在的檔案)
  • WindowsError:系統調用失敗
  • ImportError:導入子產品失敗的時候
  • KeyboardInterrupt:使用者中斷執行
  • LookupError:無效資料查詢的基類
  • IndexError:索引超出序列的範圍
  • KeyError:字典中查找一個不存在的關鍵字
  • MemoryError:記憶體溢出(可通過删除對象釋放記憶體)
  • NameError:嘗試通路一個不存在的變量
  • UnboundLocalError:通路未初始化的本地變量
  • ReferenceError:弱引用試圖通路已經垃圾回收了的對象
  • RuntimeError:一般的運作時異常
  • NotImplementedError:尚未實作的方法
  • SyntaxError:文法錯誤導緻的異常
  • IndentationError:縮進錯誤導緻的異常
  • TabError:Tab和空格混用
  • SystemError:一般的解釋器系統異常
  • TypeError:不同類型間的無效操作
  • ValueError:傳入無效的參數
  • UnicodeError:Unicode相關的異常
  • UnicodeDecodeError:Unicode解碼時的異常
  • UnicodeEncodeError:Unicode編碼錯誤導緻的異常
  • UnicodeTranslateError:Unicode轉換錯誤導緻的異常

異常體系内部有層次關系,Python異常體系中的部分關系如下所示:

阿裡雲天池Python訓練營(第1天)Python入門(上)變量、運算符與資料類型位運算循環語句異常處理

2. Python标準警告總結

  • Warning:警告的基類
  • DeprecationWarning:關于被棄用的特征的警告
  • FutureWarning:關于構造将來語義會有改變的警告
  • UserWarning:使用者代碼生成的警告
  • PendingDeprecationWarning:關于特性将會被廢棄的警告
  • RuntimeWarning:可疑的運作時行為(runtime behavior)的警告
  • SyntaxWarning:可疑文法的警告
  • ImportWarning:用于在導入子產品過程中觸發的警告
  • UnicodeWarning:與Unicode相關的警告
  • BytesWarning:與位元組或位元組碼相關的警告
  • ResourceWarning:與資源使用相關的警告

3. try - except 語句

try:
    檢測範圍
except Exception[as reason]:
    出現異常後的處理代碼
           

try 語句按照如下方式工作:

  • 首先,執行

    try

    子句(在關鍵字

    try

    和關鍵字

    except

    之間的語句)
  • 如果沒有異常發生,忽略

    except

    子句,

    try

    子句執行後結束。
  • 如果在執行

    try

    子句的過程中發生了異常,那麼

    try

    子句餘下的部分将被忽略。如果異常的類型和

    except

    之後的名稱相符,那麼對應的

    except

    子句将被執行。最後執行

    try - except

    語句之後的代碼。
  • 如果一個異常沒有與任何的

    except

    比對,那麼這個異常将會傳遞給上層的

    try

    中。

4. try - except - finally 語句

try:

檢測範圍

except Exception[as reason]:

出現異常後的處理代碼

finally:

無論如何都會被執行的代碼

不管

try

子句裡面有沒有發生異常,

finally

子句都會執行。

5. try - except - else 語句

如果在

try

子句執行時沒有發生異常,Python将執行

else

語句後的語句。

try:
    檢測範圍
except:
    出現異常後的處理代碼
else:
    如果沒有異常執行這塊代碼
           

使用

except

而不帶任何異常類型,這不是一個很好的方式,我們不能通過該程式識别出具體的異常資訊,因為它捕獲所有的異常。

try:

檢測範圍

except(Exception1[, Exception2[,…ExceptionN]]]):

發生以上多個異常中的一個,執行這塊代碼

else:

如果沒有異常執行這塊代碼

6. raise語句

Python 使用

raise

語句抛出一個指定的異常。

學習位址:https://tianchi.aliyun.com/s/58327c15d1faee512c008128d3bb9e32