Python基礎(chǔ)

本人最近在復(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á)式可以通過布爾操作符 andornot 實(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')]
image.png

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)系如下所示:

image

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!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、錯(cuò)誤和異常 1、錯(cuò)誤 從軟件方面來(lái)講,錯(cuò)誤通常是語(yǔ)法或邏輯上的。語(yǔ)法錯(cuò)誤會(huì)導(dǎo)致程序代碼不能被解釋器解釋,這些錯(cuò)...
    常大鵬閱讀 1,637評(píng)論 0 6
  • 學(xué)習(xí)python一年多,之前在cnblog上寫博客,偶然的機(jī)會(huì)看到一個(gè)簡(jiǎn)書上的一篇文章,作者學(xué)習(xí)能力和筆記方面做的...
    張老三168閱讀 597評(píng)論 0 1
  • 安裝 安裝python解釋器,默認(rèn)在安裝過程中加入到環(huán)境變量中。安裝包官方文檔安裝完成后,在IDLE中可以直接編寫...
    hgzzz閱讀 180評(píng)論 0 0
  • Python 基礎(chǔ)入門前五篇: Python 基礎(chǔ)入門--簡(jiǎn)介和環(huán)境配置 Python基礎(chǔ)入門_2基礎(chǔ)語(yǔ)法和變量類...
    材才才閱讀 386評(píng)論 0 1
  • 基礎(chǔ)知識(shí) 一、Python3 中有六個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類型: Number(數(shù)字) String(字符串) List(列...
    davidac閱讀 318評(píng)論 0 0

友情鏈接更多精彩內(nèi)容