# 數值分析 numerical analysis lecture03 **** 1. Name space: python中的命名空間為一個系統,由大至小分別為:Built-in、Global、Local ``` ex: x=8 def printX(): x=2 print(x) print(x) printX() print(x) ``` 上述程式碼的結果分別為8、2、8 因為在印出前已經有先定義printX()要執行的動作,可以看到他給予x的值為2並將其印出,所以當後續在呼叫printX()就自動印出2,其餘兩個會印出8則是因為在第一行就給定x=8 2. python常見的除錯功能,ex: try,except,else ``` ex: def divide3(a,b): try: return a/b except ZeroDivisionError as e: raise ValueError('Invalid inputs')from e print('divide3(1,0)=',divide3(1,0)) ``` 跑出來的結果為Invalid inputs,因為1/0本身就錯誤,用raise就能直接反映錯誤並且避免在錯誤時回傳None,導致程式終止運行。 raise本身的特點如下: a. 在執行程式時,我們有時候需要在某些不是我們設定的條件下將程式中止,不然會造成不是我們預期的結果,然後我們可能還沒發現,但只要程式中止了,就能馬上知道哪裡有問題 b. 在撰寫測試程式時,有時候需要確定這樣的input會讓程式報錯,也就能確保程式的品質,不會產出不是預期的結果 3. 資料結構中 is,==的差別 ==:用來判斷比值是否相等 is:用來比是否為同一物件 ``` ex: A1=(2,),A2=(3,) print(A1 is A2)#False print(A1 == A2)#False A2=A1 print(A1 is A2)#True print(A1 == A2)#True ``` 兩個程式差異點在於第二個在一開始就讓A2和A1的比值相等,可以直接看成A1和A2是一樣的,所以在做後續判斷時都為True 4. 資料結構 字典 Dictionary ``` ex: a={'A':1,'B':2,'C':3} b={'B':4,'D':5} c={**a,**b} print(c) ``` 其結果為{'A': 1, 'B': 4, 'C': 3, 'D': 5},用中文來講的話C的功用就是先取a的值,再把b的值迭代上去 5. 物件與類別_元類別(metaclass)與屬性 ``` ex: class car: def _init_(self,color,mileage): self.color=color self.mileage=mileage def _str_(self): return 'My {self.color} car had run{self.mileage}km.'.format(self=self) my_car=car('red',153543) print(my_car) car_info=str(my_car) print(car_info) print('{}'.format(my_car)) ``` 從該程式碼中我們能知道 self.color為子類別,其父類別為 _init_,兩者皆被分在car的屬性中,而下一行 def _str_中我們能看到他使用了return來回乎上面先寫完的color以及mileage