# task01
- 注釋
- 運算符
-
- 算術運算符
- 比較運算符
- 邏輯運算符
- 位運算符(不常用)
- 其它運算符
- 運算符優先級
- 變量和指派
- 資料類型和轉換
- 資料類型轉換
- print()
- 位運算
-
- 源碼、反碼和補碼
- 按位非操作
- 按位與操作&
- 按位或操作|
- 按位異或操作^
- 按位左移操作<<
- 按位右移操作>>
- 條件語句
-
- if語句
- if-else語句
- if-elif-else語句
- assert關鍵詞
- 循環語句
-
- while循環語句
- while-else循環
- for循環
-
- for-else循環
- range()函數
- enumerate()函數
- break語句
- continue語句
- pass語句
- 推導式
- 異常處理
-
- Python标準異常總結
- Python标準警告總結
- try-except語句
- try-except-finally語句
- try-except-else語句
- raise語句
- 結尾
注釋
- 在python中,
表示注釋,作用于整行(單行注釋)。#
-
和''' '''
表示區間注釋(一定區域内),在三引号内的内容都是内容注釋。""" """
運算符
算術運算符
- 加減就是平時數學符号,沒變(+,-)
- 乘
*
- 除
/
- 整除
//
- 取餘
%
- 幂(就是次方數)
注意:整除和除的差別,小數點,是否四舍五入等等,鄙人懶……自己去IDE敲敲吧**
比較運算符
- 大于,小于,大于等于,小于等于和平時書寫的符号沒有差別(
)>, <, >=, <=
- 值得注意的是“等于”和“不等于”(
)==,!=
-
注意:比較運算符傳回的值是bool類型的,True或False
邏輯運算符
- 與
and
- 或
or
- 非
not
-
注意:常用于組合的python語句中,傳回值是True或Fals
位運算符(不常用)
- 按位取反
~
- 按位與
&
- 按位或
|
- 按位異或
^
- 左移
<<
- 右移
>>
其它運算符
- 是
is
- 不是
not is
- 存在
in
- 不存在
not in
-
注意:is, is not 對比的是兩個變量的記憶體位址, ==, != 對比的是兩個變量的值。假如比較的兩個變量,指向的都是位址不可變的類型(str等),那麼is,is not 和 ==,!= 是完全等價的。假如對比的兩個變量,指向的是位址可變的類型(list,dict,tuple等),則兩者是有差別的。
運算符優先級
- 一進制運算符優于二進制運算符。如正負号。
- 先算術運算,後移位運算,最後位運算。
- 邏輯運算最後結合
變量和指派
- 在使用變量之前,需要對其先指派。
- 變量名可以包括
、但變量名不能以字母、數字、下劃線
開頭。數字
- Python 變量名是大小寫敏感的,foo != Foo。
資料類型和轉換
- 基本類型:
。bool變量用于數字運算中,用0和1代表True和False。int(整型),float(浮點型),bool(布爾型(True,False))
- 容器類型:
。字元,元組,清單,字典和集合
- Python 裡面萬物皆
(object),整型也不例外,隻要是對象,就有相應的對象
(attributes) 和屬性
(methods)。方法
- 有大緻印象就行,具體怎麼用,需要什麼參數,需要檢視文檔。
- python中有很多用途廣泛的包(package),用什麼你就引用(import)什麼。包也是對象,可以用dir()函數來看其屬性和方法。
- 對于
來說,0和0.0都可以認為是空的。數值變量
- 對于
來說,裡面沒有元素就是空的。容器變量
- 獲得資料類型:
,常用,如print(type(5.2))、print(isinstance(5.2,float))。如果判斷兩個類型是否相等,使用isinstance()。type()和isinstance()函數
資料類型轉換
- 轉換為整型:int(x)
- 轉換為字元型:int(x)
- 轉換為浮點型:float(x)
print()
- 輸出函數
- 每次輸出後都會換行
- 額……沒了
位運算
源碼、反碼和補碼
- 二進制有三種不同的表示形式:
,計算機内部使用原碼、反碼和補碼
來表示。補碼
- 符号位:最高位為符号位,0表示正數,1表示負數。在位運算中符号位也參與運算
- 原碼:就是其二進制表示(注意,有一位符号位)。 0 00 00 11(二進制) -> 3(十進制)(紅色為符号位)
0 00 00 11 -> -31
-
反碼:正數的反碼就是原碼,負數的反碼是符号位不變,其餘位取反(對應正數按位取反)。
正數反碼:00 00 00 11 -> 3
負數反碼:
原碼:10 00 00 11
反碼:11 11 11 00
-
補碼:正數的補碼就是原碼,負數的補碼是反碼+1。
00 00 00 11 -> 3
11 11 11 01 -> -3
按位非操作
- ~ 把 num 的
中的 0 和 1補碼
(0 變為 1,1 變為 0)有符号整數的符号位在 ~ 運算中同樣會取反。全部取反
-
00 00 01 01 -> 5
11 11 10 10 -> -6
-
11 11 10 11 -> -5
00 00 01 00 -> 4
按位與操作&
-
隻有兩個對應位都為 1 時才為 1
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
例子:
00 00 01 01 & 00 00 01 10 = 00 00 01 00
按位或操作|
-
隻要兩個對應位中有一個 1 時就為 1
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
例子:
00 00 01 01 | 00 00 01 10 = 00 00 01 11
按位異或操作^
- 隻有兩個對應位不同時才為 1
-
異或操作的性質:滿足交換律和結合律
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
例子:
00 00 01 01 ^00 00 01 10 = 00 00 00 11
按位左移操作<<
-
num << i 将 num 的二進制表示向左移動 i 位所得的值。
00 00 10 11 -> 11
11 << 3
01 01 10 00 -> 88
按位右移操作>>
-
num >> i 将 num 的二進制表示向右移動 i 位所得的值。
00 00 10 11 -> 11
11 >> 2
00 00 00 10 -> 2
條件語句
if語句
if expression:
expr_true_suite
- if 語句的 expr_true_suite 代碼塊隻有當條件表達式 expression 結果為真時才執行,否則将繼續執行緊跟在該代碼塊後面的語句。
- 單個 if 語句中的 expression 條件表達式可以通過布爾操作符 and , or 和 not 實作多重條件判斷。
if-else語句
if expression:
expr_true_suite
else
expr_false_suite
- Python 提供與 if 搭配使用的 else,如果 if 語句的條件表達式結果布爾值為
,那麼程式将執行 else 語句後的代碼。假
- if 語句
,即在一個 if 語句中嵌入另一個 if 語句,進而構成不同層次的選擇結構。Python 使用縮進而不是大括号來标記代碼塊邊界,是以要特别注意 else 的懸挂問題(就近原則)。支援嵌套
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,用來檢查多個表達式是否為真,并在為真時執行特定代碼塊中的代碼。
assert關鍵詞
- assert 這個關鍵詞我們稱之為“斷言”,當這個關鍵詞後邊的條件為
時,程式自動崩潰并False
。抛出 AssertionError 的異常
- 在進行單元測試時,可以用來在程式中置入檢查點,隻有條件為
才能讓程式True
。正常工作
例子:
my_list = ['lsgogroup']
my_list.pop(0)
assert len(my_list) > 0
# AssertionError
循環語句
while循環語句
- while 語句最基本的形式包括一個位于頂部的
,一個或多個屬于 while 代碼塊的縮進語句。布爾表達式
while 布爾表達式:
代碼塊
- while 循環的代碼塊會一直循環執行,直到布爾表達式的值為布爾假(0為假,1為真,true為真,false為假)。
例子:
string = 'abcd'
while string:
print(string)
string = string[1:]
輸出:
abcd
bcd
cd
d
while-else循環
while 布爾表達式:
代碼塊
else:
代碼塊
- 當 while 循環正常執行完的情況下,執行 else 輸出,如果 while 循環中執行了跳出循環的語句,比如 break ,将不執行 else 代碼塊的内容。
例子:
count = 0
while count < 5:
print("%d is less than 5" % count)
count = 6
break
else:
print("%d is not less than 5" % count)
輸出:
for循環
for 疊代變量 in 可疊代對象:
代碼塊
- for 循環是疊代循環,在Python中相當于一個通用的序列疊代器,可以周遊任何有序序列,如 str、list、tuple 等,也可以周遊任何可疊代對象,如 dict 。
例子:
member = ['張三', '李四', '劉德華', '劉六', '周潤發']
for each in member:
print(each)
輸出:
張三
李四
劉德華
劉六
周潤發
for-else循環
for 疊代變量 in 可疊代對象:
代碼塊
else:
代碼塊
- 和while-else類似,當 for 循環正常執行完的情況下,執行 else 輸出,如果 for 循環中執行了跳出循環的語句,比如 break,将不執行 else 代碼塊的内容,與 while - else 語句一樣。
range()函數
- range 這個BIF的作用是生成一個從 start 參數的值開始到 stop 參數的值結束的數字序列,該序列包含 start 的值但
。不包含 stop 的值
例子:
for i in range(2, 9): # 不包含9
print(i)
輸出:
2
3
4
5
6
7
8
enumerate()函數
- sequence:一個序列、疊代器或其他支援疊代對象。
- start:下标起始位置。
- 傳回 enumerate(枚舉) 對象
例子:
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)) # 下标從 1 開始
print(lst)
# [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
break語句
- break 語句可以跳出目前所在層的循環。
continue語句
- continue 終止本輪循環并開始下一輪循環。
pass語句
- pass 語句的意思是“不做任何事”,如果你在需要有語句的地方不寫任何語句,那麼解釋器會提示出錯,而 pass 語句就是用來解決這些問題的。
- pass 是
,不做任何操作,隻起到占位的作用,其作用是為了保持程式結構的完整性。盡管 pass語句不做任何操作,但如果暫時不确定要在一個位置放上什麼樣的代碼,可以先放置一個 pass 語句,讓代碼可以正常運作。空語句
例子:
def a_func():
pass
推導式
- 推導式有很多,主要減少代碼量,增強代碼可讀性。
- 清單推導式
- 元組推導式
- 字典推導式
- 集合推導式
- 其它
異常處理
- 異常就是運作期檢測到的
。計算機語言針對錯誤
定義了異常類型,某種錯誤引發對應的異常時,異常處理程式将被啟動,進而恢複程式的正常運作。可能出現的錯誤
Python标準異常總結
-
:所有異常的 基類BaseException
-
:正常異常的 基類Exception
-
:所有的内建标準異常的基類StandardError
-
:所有數值計算異常的基類ArithmeticError
-
:浮點計算異常FloatingPointError
-
:數值運算超出最大限制OverflowError
-
:除數為零ZeroDivisionError
-
:斷言語句(assert)失敗AssertionError
-
:嘗試通路未知的對象屬性AttributeError
-
:沒有内建輸入,到達EOF标記EOFError
-
:作業系統異常的基類EnvironmentError
-
:輸入/輸出操作失敗IOError
-
:作業系統産生的異常(例如打開一個不存在的檔案)OSError
-
:系統調用失敗WindowsError
-
:導入子產品失敗的時候ImportError
-
:使用者中斷執行KeyboardInterrupt
-
:無效資料查詢的基類LookupError
-
:索引超出序列的範圍IndexError
-
:字典中查找一個不存在的關鍵字KeyError
-
:記憶體溢出(可通過删除對象釋放記憶體)MemoryError
-
:嘗試通路一個不存在的變量NameError
-
:通路未初始化的本地變量UnboundLocalError
-
:弱引用試圖通路已經垃圾回收了的對象ReferenceError
-
:一般的運作時異常RuntimeError
-
:尚未實作的方法NotImplementedError
-
:文法錯誤導緻的異常SyntaxError
-
:縮進錯誤導緻的異常IndentationError
-
:Tab和空格混用TabError
-
:一般的解釋器系統異常SystemError
-
:不同類型間的無效操作TypeError
-
:傳入無效的參數ValueError
-
:Unicode相關的異常UnicodeError
-
:Unicode解碼時的異常UnicodeDecodeError
-
:Unicode編碼錯誤導緻的異常UnicodeEncodeError
-
:Unicode轉換錯誤導緻的異常UnicodeTranslateError
Python異常體系中的部分關系如下所示:
Python标準警告總結
-
:警告的基類Warning
-
:關于被棄用的特征的警告DeprecationWarning
-
:關于構造将來語義會有改變的警告FutureWarning
-
:使用者代碼生成的警告UserWarning
-
:關于特性将會被廢棄的警告PendingDeprecationWarning
-
:可疑的運作時行為(runtime behavior)的警告RuntimeWarning
-
:可疑文法的警告SyntaxWarning
-
:用于在導入子產品過程中觸發的警告ImportWarning
-
:與Unicode相關的警告UnicodeWarning
-
:與位元組或位元組碼相關的警告BytesWarning
-
:與資源使用相關的警告ResourceWarning
try-except語句
try:
檢測範圍
except Exception[as reason]:
出現異常後的處理代碼
- try 語句按照如下方式工作:
- 首先,執行 try 子句(在關鍵字 try 和關鍵字 except 之間的語句)
- 如果沒有異常發生,忽略 except 子句, try 子句執行後結束。
- 如果在執行 try 子句的過程中發生了異常,那麼 try 子句餘下的部分将被忽略。如果異常的類型和except 之後的名稱相符,那麼對應的 except 子句将被執行。最後執行 try 語句之後的代碼。
- 如果一個異常沒有與任何的 except 比對,那麼這個異常将會傳遞給
。上層的 try 中
例子:
try:
f = open('test.txt')
print(f.read())
f.close()
except OSError:
print('打開檔案出錯')
# 打開檔案出錯
- 一個 try 語句可能包含多個 except 子句,分别來處理不同的特定的異常。最多隻有一個分支會被執行。
例子:
try:
int("abc")
s = 1 + '1'
f = open('test.txt')
print(f.read())
f.close()
except OSError as error:
print('打開檔案出錯\n原因是:' + str(error))
except TypeError as error:
print('類型出錯\n原因是:' + str(error))
except ValueError as error:
print('數值出錯\n原因是:' + str(error))
# 數值出錯
# 原因是:invalid literal for int() with base 10: 'abc'
- 一個 except 子句可以同時處理多個異常,這些異常将被放在一個括号裡成為一個元組。
try:
s = 1 + '1'
int("abc")
f = open('test.txt')
print(f.read())
f.close()
except (OSError, TypeError, ValueError) as error:
print('出錯了!\n原因是:' + str(error))
# 出錯了!
# 原因是:unsupported operand type(s) for +: 'int' and 'str'
try-except-finally語句
try:
檢測範圍
except Exception[as reason]:
出現異常後的處理代碼
finally:
無論如何都會被執行的代碼
- 如果一個異常在 try 子句裡被抛出,而又沒有任何的 except 把它截住,那麼這個異常會在 finally 子句執行後被抛出。
例子:
def divide(x, y):
try:
result = x / y
print("result is", result)
except ZeroDivisionError:
print("division by zero!")
finally:
print("executing finally clause")
divide(2, 1)
# result is 2.0
# executing finally clause
divide(2, 0)
# division by zero!
# executing finally clause
divide("2", "1")
# executing finally clause
# TypeError: unsupported operand type(s) for /: 'str' and 'str'
try-except-else語句
- 如果在 try 子句執行時沒有發生異常,Python将執行 else 語句後的語句。
try:
檢測範圍
except:
出現異常後的處理代碼
else:
如果沒有異常執行這塊代碼
- 使用 except 而不帶任何異常類型,這不是一個很好的方式,我們不能通過該程式識别出具體的異常資訊,因為它捕獲所有的異常。
try:
檢測範圍
except(Exception1[, Exception2[,...ExceptionN]]]):
發生以上多個異常中的一個,執行這塊代碼
else:
如果沒有異常執行這塊代碼
例子:
try:
fh = open("testfile", "w")
fh.write("這是一個測試檔案,用于測試異常!!")
except IOError:
print("Error: 沒有找到檔案或讀取檔案失敗")
else:
print("内容寫入檔案成功")
fh.close()
# 内容寫入檔案成功
- 注意: else 語句的存在必須以 except 語句的存在為前提,在沒有 except 語句的 try 語句中使用 else 語句,會引發文法錯誤。
raise語句
- Python 使用 raise 語句抛出一個指定的異常。
try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
# An exception flew by!
結尾
python參考書領取處