Python3控制結構與函式

覆手為雲p發表於2017-06-09

 

 

1、if語句的另一種寫法

       expression1 if boolean_expression else expression2

       boolean_expression為true時使用expression1,否則用expression2。常用於預設值的設定。

2、迴圈結構

while和for迴圈末尾都可以再加一句else語句。只要迴圈正常終止,else語句就會得到執行,但若由於break或返回語句,以及產生異常導致跳出迴圈,else語句則不會執行。

3、異常處理完全模組

    try:    suite1
    except exception_group1 as varialble1:   suite2     #as為可選,如果有,variable中則儲存了該異常。
    except exception_group2 as variabble2
    else:    suite3
    finally:    suite4

如果try的suite1正常執行完畢則會執行else的內容。如果發生異常則不執行。

finally的suite4無論前邊發生什麼都會被執行。即使發生發生的異常在except中找不到相匹配的項,也會執行了finally 再終止程式。

4、異常體系常用分支

Exception:

  ArithmeticError

  EnvironmentError:

    IOError

    OSError

  EOFError

  LookupError:

    IndexError

    KeyError

  ValueError

 

       Exception屬於BaseException的子類,BaseException屬於object的子類。

       異常處理中會由上到下的讀取except,如果異常與之匹配,則停止繼續向下檢索。所以為了使異常反應得更具體,一般將最小的子類放在最前邊。

       產生異常:   raise exception(args)

                     raise exception(args) from original_exception

       >自定義異常:

       class exceptionName(baseExceiption): pass

       當在語句中想要在某處產生這個異常時就用raise exceptionName()

       多個異常也可放在一起(用isinstance()函式進行區分):

except (InvalidEntityError,InvalidTagContentError) ar err:
       if isinstance(err,InvalidNumericEntityError):
              err="invalid numeric entity"
       elif isinstance(err,InvalidAlphaEntityError):
              err="invalid alphabetic entity"

5、自定義函式

格式:

def functionName(arguments):

  suite

 

       包括:全域性函式、區域性函式、lambda函式(λ)、方法。

       呼叫一個函式時必須給定全部引數值(如果函式需要引數的話且未指定預設值),不然會產生一個TypeError異常。

       呼叫函式時的引數傳遞不一定嚴格按照函式定義時的引數順序,也可以用name=value的方式進行個別引數的指定傳遞。

       也可以用*做為一個函式的引數,用於表示*位置之後不應該再出現位置引數,否則會產生一個TyepeError。樣:def a(a,*,b=1):pass     a(1,2)是錯誤的呼叫法,因為它只接受一個位置引數。

       **也可被稱為對映拆分操作符,其作用類似於*對拆分序列型別資料。

6、全域性範圍的變數(global)

當一個函式用到一個變數,此變數卻不在函式內部,那麼此變數就是全域性變數,在呼叫這個函式時使用這個變數就必須用global進行宣告(global xx),不然此變數就會一直是原始的值,而不是你想要的值。

對於存在於函式之內的函式欲使用上一層函式的變數則使用nonlocal來宣告。否則同全域性變數一樣只能使用不能改變。

 

7、lambda函式

       格式 lambda parameter:expression

       parameter是可選的,如果提供,通常以逗號分隔。expression不能包含分支或迴圈語句,可以包含條件表示式,也不能包含return。因函式本身相當於一個有返回計算表示式結果的匿名函式。如果expression是一個元組,就需要用“()”括起來。

       例:area=lambda b,h:05*b*h  ;呼叫方法:area(1,2)

       常用於sort表示式中的key(例:elements.sort(key=lambda e:(e[1],e[2]));忽略第一項);

       以及預設字典的預設值設定(例:rstr=collections.defaultdict(lambda:"No message available")     )

8、斷言assert:

       格式     assert boolean_expression,optional_exprssion

       如果boolean_expression結果為False,就產生一個AssertionError,如果給了可選的optional_exprssion,就表達出來。在最後執行整下程式不想執行assert語句時就用指令-O (例:python -O promgramname.py)來實現。

相關文章