---
# System prepended metadata

title: 數值分析 numerical analysis lecture03

---

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