Python入門(上)
變量、運算符與資料類型
1. 注釋
- 在 Python 中,
表示注釋,作用于整行。#
-
或者''' '''
表示區間注釋,在三引号之間的所有内容被注釋""" """
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
其他運算符 操作符 | 名稱 | 示例 |
---|---|---|
| 存在 | |
| 不存在 | |
| 是 | |
| 不是 | |
注意:
- 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 | 整型 | |
float | 浮點型 | |
bool | 布爾型 | |
有時候我們想保留浮點型的小數點後
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異常體系中的部分關系如下所示:
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