天天看點

python學習——阿裡雲天池龍珠計劃(python訓練營)——task01注釋運算符位運算條件語句循環語句for循環異常處理結尾

# 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。

資料類型和轉換

  • 基本類型:

    int(整型),float(浮點型),bool(布爾型(True,False))

    。bool變量用于數字運算中,用0和1代表True和False。
  • 容器類型:

    字元,元組,清單,字典和集合

  • Python 裡面萬物皆

    對象

    (object),整型也不例外,隻要是對象,就有相應的

    屬性

    (attributes) 和

    方法

    (methods)。
  • 有大緻印象就行,具體怎麼用,需要什麼參數,需要檢視文檔。
  • python中有很多用途廣泛的包(package),用什麼你就引用(import)什麼。包也是對象,可以用dir()函數來看其屬性和方法。
  • 對于

    數值變量

    來說,0和0.0都可以認為是空的。
  • 對于

    容器變量

    來說,裡面沒有元素就是空的。
  • 獲得資料類型:

    type()和isinstance()函數

    ,常用,如print(type(5.2))、print(isinstance(5.2,float))。如果判斷兩個類型是否相等,使用isinstance()。

資料類型轉換

  • 轉換為整型:int(x)
  • 轉換為字元型:int(x)
  • 轉換為浮點型:float(x)

print()

  • 輸出函數
  • 每次輸出後都會換行
  • 額……沒了

位運算

源碼、反碼和補碼

  • 二進制有三種不同的表示形式:

    原碼、反碼和補碼

    ,計算機内部使用

    補碼

    來表示。
  • 符号位:最高位為符号位,0表示正數,1表示負數。在位運算中符号位也參與運算
  • 原碼:就是其二進制表示(注意,有一位符号位)。 0 00 00 11(二進制) -> 3(十進制)(紅色為符号位)

    1

    0 00 00 11 -> -3
  • 反碼:正數的反碼就是原碼,負數的反碼是符号位不變,其餘位取反(對應正數按位取反)。

    正數反碼: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

    :除數為零
  • 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學習——阿裡雲天池龍珠計劃(python訓練營)——task01注釋運算符位運算條件語句循環語句for循環異常處理結尾

Python标準警告總結

  • Warning

    :警告的基類
  • DeprecationWarning

    :關于被棄用的特征的警告
  • FutureWarning

    :關于構造将來語義會有改變的警告
  • UserWarning

    :使用者代碼生成的警告
  • PendingDeprecationWarning

    :關于特性将會被廢棄的警告
  • RuntimeWarning

    :可疑的運作時行為(runtime behavior)的警告
  • SyntaxWarning

    :可疑文法的警告
  • ImportWarning

    :用于在導入子產品過程中觸發的警告
  • UnicodeWarning

    :與Unicode相關的警告
  • BytesWarning

    :與位元組或位元組碼相關的警告
  • ResourceWarning

    :與資源使用相關的警告

try-except語句

try:
     檢測範圍
except Exception[as reason]:
     出現異常後的處理代碼
           
  • try 語句按照如下方式工作:
  1. 首先,執行 try 子句(在關鍵字 try 和關鍵字 except 之間的語句)
  2. 如果沒有異常發生,忽略 except 子句, try 子句執行後結束。
  3. 如果在執行 try 子句的過程中發生了異常,那麼 try 子句餘下的部分将被忽略。如果異常的類型和except 之後的名稱相符,那麼對應的 except 子句将被執行。最後執行 try 語句之後的代碼。
  4. 如果一個異常沒有與任何的 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參考書領取處