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)來實現。