本人最近在復(fù)習(xí)Python,這些內(nèi)容參考的是阿里天池學(xué)習(xí)賽里面的Python訓(xùn)練營(yíng),純屬自學(xué)筆記??稍斍?a target="_blank">天池AI學(xué)習(xí)
一、簡(jiǎn)介
Python 是一種通用編程語(yǔ)言,其在科學(xué)計(jì)算和機(jī)器學(xué)習(xí)領(lǐng)域具有廣泛的應(yīng)用。
二、變量、運(yùn)算符與數(shù)據(jù)類型
1. 注釋
在 Python 中,
#表示注釋,作用于整行。''' '''或者""" """表示區(qū)間注釋,在三引號(hào)之間的所有內(nèi)容被注釋
2. 運(yùn)算符
算術(shù)運(yùn)算符
| 操作符 | 名稱 | 示例 |
|---|---|---|
+ |
加 | 1 + 1 |
- |
減 | 2 - 1 |
* |
乘 | 3 * 4 |
/ |
除 | 3 / 4 |
// |
整除(地板除) | 3 // 4 |
% |
取余 | 3 % 4 |
** |
冪 | 2 ** 3 |
比較運(yùn)算符
| 操作符 | 名稱 | 示例 |
|---|---|---|
> |
大于 | 2 > 1 |
>= |
大于等于 | 2 >= 4 |
< |
小于 | 1 < 2 |
<= |
小于等于 | 5 <= 2 |
== |
等于 | 3 == 4 |
!= |
不等于 | 3 != 5 |
位運(yùn)算符
| 操作符 | 名稱 | 示例 |
|---|---|---|
~ |
按位取反 | ~4 |
& |
按位與 | 4 & 5 |
| ` | ` | 按位或 |
^ |
按位異或 | 4 ^ 5 |
<< |
左移 | 4 << 2 |
>> |
右移 | 4 >> 2 |
三元運(yùn)算符
x, y = 4, 5
small = x if x < y else y
print(small) # 4
其他運(yùn)算符
| 操作符 | 名稱 | 示例 |
|---|---|---|
in |
存在 | 'A' in ['A', 'B', 'C'] |
not in |
不存在 | 'h' not in ['A', 'B', 'C'] |
is |
是 | "hello" is "hello" |
not is |
不是 | "hello" is not "hello" |
3. 變量和賦值
- 在使用變量之前,需要對(duì)其先賦值。
- 變量名可以包括字母、數(shù)字、下劃線、但變量名不能以數(shù)字開頭。
- Python 變量名是大小寫敏感的,foo != Foo。
4. 數(shù)據(jù)類型與轉(zhuǎn)換
| 類型 | 名稱 | 示例 |
|---|---|---|
| int | 整型 <class 'int'>
|
-876, 10 |
| float | 浮點(diǎn)型<class 'float'>
|
3.149, 11.11 |
| bool | 布爾型<class 'bool'>
|
True, False |
注:
-
type()不會(huì)認(rèn)為子類是一種父類類型,不考慮繼承關(guān)系。 -
isinstance()會(huì)認(rèn)為子類是一種父類類型,考慮繼承關(guān)系。
如果要判斷兩個(gè)類型是否相同推薦使用 isinstance()。
類型轉(zhuǎn)換
- 轉(zhuǎn)換為整型
int(x, base=10) - 轉(zhuǎn)換為字符串
str(object='') - 轉(zhuǎn)換為浮點(diǎn)型
float(x)
三、條件語(yǔ)句
1. if 語(yǔ)句
if expression:
expr_true_suite
- if 語(yǔ)句的
expr_true_suite代碼塊只有當(dāng)條件表達(dá)式expression結(jié)果為真時(shí)才執(zhí)行,否則將繼續(xù)執(zhí)行緊跟在該代碼塊后面的語(yǔ)句。 - 單個(gè) if 語(yǔ)句中的
expression條件表達(dá)式可以通過布爾操作符and,or和not實(shí)現(xiàn)多重條件判斷。
2. if - else 語(yǔ)句
if expression:
expr_true_suite
else:
expr_false_suite
- Python 提供與 if 搭配使用的 else,如果 if 語(yǔ)句的條件表達(dá)式結(jié)果布爾值為假,那么程序?qū)?zhí)行 else 語(yǔ)句后的代碼。
3. if - elif - else 語(yǔ)句
if expression1:
expr1_true_suite
elif expression2:
expr2_true_suite
.
.
elif expressionN:
exprN_true_suite
else:
expr_false_suite
- elif 語(yǔ)句即為 else if,用來(lái)檢查多個(gè)表達(dá)式是否為真,并在為真時(shí)執(zhí)行特定代碼塊中的代碼。
4. assert 關(guān)鍵詞
-
assert這個(gè)關(guān)鍵詞我們稱之為“斷言”,當(dāng)這個(gè)關(guān)鍵詞后邊的條件為 False 時(shí),程序自動(dòng)崩潰并拋出AssertionError的異常。
my_list = ['lsgogroup']
my_list.pop(0)
assert len(my_list) > 0
# AssertionError
【例子】在進(jìn)行單元測(cè)試時(shí),可以用來(lái)在程序中置入檢查點(diǎn),只有條件為 True 才能讓程序正常工作。
assert 3 > 7
# AssertionError
四、循環(huán)語(yǔ)句
1. while 循環(huán)
while語(yǔ)句最基本的形式包括一個(gè)位于頂部的布爾表達(dá)式,一個(gè)或多個(gè)屬于while代碼塊的縮進(jìn)語(yǔ)句。
while 布爾表達(dá)式:
代碼塊
while循環(huán)的代碼塊會(huì)一直循環(huán)執(zhí)行,直到布爾表達(dá)式的值為布爾假。
如果布爾表達(dá)式不帶有<、>、==、!=、in、not in等運(yùn)算符,僅僅給出數(shù)值之類的條件,也是可以的。當(dāng)while后寫入一個(gè)非零整數(shù)時(shí),視為真值,執(zhí)行循環(huán)體;寫入0時(shí),視為假值,不執(zhí)行循環(huán)體。也可以寫入str、list或任何序列,長(zhǎng)度非零則視為真值,執(zhí)行循環(huán)體;否則視為假值,不執(zhí)行循環(huán)體。
2. while - else 循環(huán)
while 布爾表達(dá)式:
代碼塊
else:
代碼塊
當(dāng)while循環(huán)正常執(zhí)行完的情況下,執(zhí)行else輸出,如果while循環(huán)中執(zhí)行了跳出循環(huán)的語(yǔ)句,比如 break,將不執(zhí)行else代碼塊的內(nèi)容。
3. for 循環(huán)
for循環(huán)是迭代循環(huán),在Python中相當(dāng)于一個(gè)通用的序列迭代器,可以遍歷任何有序序列,如str、list、tuple等,也可以遍歷任何可迭代對(duì)象,如dict。
for 迭代變量 in 可迭代對(duì)象:
代碼塊
每次循環(huán),迭代變量被設(shè)置為可迭代對(duì)象的當(dāng)前元素,提供給代碼塊使用。
4. for - else 循環(huán)
for 迭代變量 in 可迭代對(duì)象:
代碼塊
else:
代碼塊
當(dāng)for循環(huán)正常執(zhí)行完的情況下,執(zhí)行else輸出,如果for循環(huán)中執(zhí)行了跳出循環(huán)的語(yǔ)句,比如 break,將不執(zhí)行else代碼塊的內(nèi)容,與while - else語(yǔ)句一樣。
5. range() 函數(shù)
range([start,] stop[, step=1])
- 這個(gè)BIF(Built-in functions)有三個(gè)參數(shù),其中用中括號(hào)括起來(lái)的兩個(gè)表示這兩個(gè)參數(shù)是可選的。
-
step=1表示第三個(gè)參數(shù)的默認(rèn)值是1。 -
range這個(gè)BIF的作用是生成一個(gè)從start參數(shù)的值開始到stop參數(shù)的值結(jié)束的數(shù)字序列,該序列包含start的值但不包含stop的值。
6. enumerate()函數(shù)
enumerate(sequence, [start=0])
- sequence:一個(gè)序列、迭代器或其他支持迭代對(duì)象。
- start:下標(biāo)起始位置。
- 返回 enumerate(枚舉) 對(duì)象
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
lst = list(enumerate(seasons))
print(lst)
# [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
lst = list(enumerate(seasons, start=1)) # 下標(biāo)從 1 開始
print(lst)
# [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

enumerate()與 for 循環(huán)的結(jié)合使用。
for i, a in enumerate(A)
do something with a
用 enumerate(A) 不僅返回了 A 中的元素,還順便給該元素一個(gè)索引值 (默認(rèn)從 0 開始)。此外,用 enumerate(A, j) 還可以確定索引起始值為 j。
7. break 語(yǔ)句
break語(yǔ)句可以跳出當(dāng)前所在層的循環(huán)。
8. continue 語(yǔ)句
continue終止本輪循環(huán)并開始下一輪循環(huán)。
9. pass 語(yǔ)句
pass 語(yǔ)句的意思是“不做任何事”,如果你在需要有語(yǔ)句的地方不寫任何語(yǔ)句,那么解釋器會(huì)提示出錯(cuò),而 pass 語(yǔ)句就是用來(lái)解決這些問題的。
10. 推導(dǎo)式
列表推導(dǎo)式
[ expr for value in collection [if condition] ]
元組推導(dǎo)式
( expr for value in collection [if condition] )
字典推導(dǎo)式
{ key_expr: value_expr for value in collection [if condition] }
集合推導(dǎo)式
{ expr for value in collection [if condition] }
其它
-
next(iterator[, default])Return the next item from the iterator. If default is given and the iterator is exhausted, it is returned instead of raising StopIteration.
e = (i for i in range(10))
print(e)
# <generator object <genexpr> at 0x0000007A0B8D01B0>
print(next(e)) # 0
print(next(e)) # 1
for each in e:
print(each, end=' ')
# 2 3 4 5 6 7 8 9
五、異常處理
異常就是運(yùn)行期檢測(cè)到的錯(cuò)誤。計(jì)算機(jī)語(yǔ)言針對(duì)可能出現(xiàn)的錯(cuò)誤定義了異常類型,某種錯(cuò)誤引發(fā)對(duì)應(yīng)的異常時(shí),異常處理程序?qū)⒈粏?dòng),從而恢復(fù)程序的正常運(yùn)行。
1. Python 標(biāo)準(zhǔn)異常總結(jié)
- BaseException:所有異常的 基類
- Exception:常規(guī)異常的 基類
- StandardError:所有的內(nèi)建標(biāo)準(zhǔn)異常的基類
- ArithmeticError:所有數(shù)值計(jì)算異常的基類
- FloatingPointError:浮點(diǎn)計(jì)算異常
- OverflowError:數(shù)值運(yùn)算超出最大限制
- ZeroDivisionError:除數(shù)為零
- AssertionError:斷言語(yǔ)句(assert)失敗
- AttributeError:嘗試訪問未知的對(duì)象屬性
- EOFError:沒有內(nèi)建輸入,到達(dá)EOF標(biāo)記
- EnvironmentError:操作系統(tǒng)異常的基類
- IOError:輸入/輸出操作失敗
- OSError:操作系統(tǒng)產(chǎn)生的異常(例如打開一個(gè)不存在的文件)
- WindowsError:系統(tǒng)調(diào)用失敗
- ImportError:導(dǎo)入模塊失敗的時(shí)候
- KeyboardInterrupt:用戶中斷執(zhí)行
- LookupError:無(wú)效數(shù)據(jù)查詢的基類
- IndexError:索引超出序列的范圍
- KeyError:字典中查找一個(gè)不存在的關(guān)鍵字
- MemoryError:內(nèi)存溢出(可通過刪除對(duì)象釋放內(nèi)存)
- NameError:嘗試訪問一個(gè)不存在的變量
- UnboundLocalError:訪問未初始化的本地變量
- ReferenceError:弱引用試圖訪問已經(jīng)垃圾回收了的對(duì)象
- RuntimeError:一般的運(yùn)行時(shí)異常
- NotImplementedError:尚未實(shí)現(xiàn)的方法
- SyntaxError:語(yǔ)法錯(cuò)誤導(dǎo)致的異常
- IndentationError:縮進(jìn)錯(cuò)誤導(dǎo)致的異常
- TabError:Tab和空格混用
- SystemError:一般的解釋器系統(tǒng)異常
- TypeError:不同類型間的無(wú)效操作
- ValueError:傳入無(wú)效的參數(shù)
- UnicodeError:Unicode相關(guān)的異常
- UnicodeDecodeError:Unicode解碼時(shí)的異常
- UnicodeEncodeError:Unicode編碼錯(cuò)誤導(dǎo)致的異常
- UnicodeTranslateError:Unicode轉(zhuǎn)換錯(cuò)誤導(dǎo)致的異常
異常體系內(nèi)部有層次關(guān)系,Python異常體系中的部分關(guān)系如下所示:

2. Python標(biāo)準(zhǔn)警告總結(jié)
- Warning:警告的基類
- DeprecationWarning:關(guān)于被棄用的特征的警告
- FutureWarning:關(guān)于構(gòu)造將來(lái)語(yǔ)義會(huì)有改變的警告
- UserWarning:用戶代碼生成的警告
- PendingDeprecationWarning:關(guān)于特性將會(huì)被廢棄的警告
- RuntimeWarning:可疑的運(yùn)行時(shí)行為(runtime behavior)的警告
- SyntaxWarning:可疑語(yǔ)法的警告
- ImportWarning:用于在導(dǎo)入模塊過程中觸發(fā)的警告
- UnicodeWarning:與Unicode相關(guān)的警告
- BytesWarning:與字節(jié)或字節(jié)碼相關(guān)的警告
- ResourceWarning:與資源使用相關(guān)的警告
3. try - except 語(yǔ)句
try:
檢測(cè)范圍
except Exception[as reason]:
出現(xiàn)異常后的處理代碼
try 語(yǔ)句按照如下方式工作:
- 首先,執(zhí)行
try子句(在關(guān)鍵字try和關(guān)鍵字except之間的語(yǔ)句) - 如果沒有異常發(fā)生,忽略
except子句,try子句執(zhí)行后結(jié)束。 - 如果在執(zhí)行
try子句的過程中發(fā)生了異常,那么try子句余下的部分將被忽略。如果異常的類型和except之后的名稱相符,那么對(duì)應(yīng)的except子句將被執(zhí)行。最后執(zhí)行try - except語(yǔ)句之后的代碼。 - 如果一個(gè)異常沒有與任何的
except匹配,那么這個(gè)異常將會(huì)傳遞給上層的try中。
4. try - except - finally 語(yǔ)句
try:
檢測(cè)范圍
except Exception[as reason]:
出現(xiàn)異常后的處理代碼
finally:
無(wú)論如何都會(huì)被執(zhí)行的代碼
不管try子句里面有沒有發(fā)生異常,finally子句都會(huì)執(zhí)行。
5. try - except - else 語(yǔ)句
如果在try子句執(zhí)行時(shí)沒有發(fā)生異常,Python將執(zhí)行else語(yǔ)句后的語(yǔ)句。
try:
檢測(cè)范圍
except:
出現(xiàn)異常后的處理代碼
else:
如果沒有異常執(zhí)行這塊代碼
使用except而不帶任何異常類型,這不是一個(gè)很好的方式,我們不能通過該程序識(shí)別出具體的異常信息,因?yàn)樗东@所有的異常。
try:
檢測(cè)范圍
except(Exception1[, Exception2[,...ExceptionN]]]):
發(fā)生以上多個(gè)異常中的一個(gè),執(zhí)行這塊代碼
else:
如果沒有異常執(zhí)行這塊代碼
注意:else語(yǔ)句的存在必須以except語(yǔ)句的存在為前提,在沒有except語(yǔ)句的try語(yǔ)句中使用else語(yǔ)句,會(huì)引發(fā)語(yǔ)法錯(cuò)誤。
6. raise語(yǔ)句
Python 使用raise語(yǔ)句拋出一個(gè)指定的異常。
try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
# An exception flew by!