# 數值分析 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