---
# System prepended metadata

title: Python - Day 4
tags: [Python]

---

# Python - Day 4
###### tags: `Python`

## 模組 Module
* 獨立的程式檔案，可重複載入
* 先載入再使用
* 很多內建模組

### 使用方法
1. 載入
```python=
import abc         #以實際名稱載入
import abc as a    #以別名載入
```
2. 基本語法
```python=
import sys
print ( sys.platform )  #印出作業系統
print ( sys.maxsize )   #印出整數型態的最大值
print ( sys.path )      #印出搜尋模組的路徑
```
```python=
import sys as s       #別名！
print ( s.platform )  #印出作業系統
print ( s.maxsize )   #印出整數型態的最大值
print ( s.path )      #印出搜尋模組的路徑
```
### 自訂模組
1. 寫出主程式
2. 寫出模組
3. 在主程式中引入模組
4. 確保模組存在(sys.path)中任一路徑，python才能找到
5. 否則需要增加 path list 或是 指定模組位置
```python=
#main.py
import sys
sys.path.append ( "module" )        #搜尋列表加入新的路徑列表(module為相對路徑)
print ( sys.platform )              #印出作業系統
print ( sys.maxsize )               #印出整數型態的最大值
import module.geometry as geometry  #指定模組位置
result = geometry.distance( 1,1,5,5 )
print ( result )
result = geometry.slope( 1,2,5,6 )
print ( result )
print ( sys.path )
```
```python=
#geometry.py
def distance ( x1, y1, x2, y2 ):
    #兩點距離
    return (( x2 - x1 ) ** 2 + ( y2 - y1 ) ** 2) ** 0.5
def slope ( x1, y1, x2, y2 ):
    #兩點斜率
    return (y2 - y1) / ( x2 - x1 )
```

## 封包 Package

* 用來整理、分配模組程式
* 可以很多層

### 建立封包
1. 建立封包資料夾
2. 加入(__init__.py)內容可以留空
3. 可自行建立其他細部資料夾

### 基本語法
```python=
#main.py
import geometry.point
result = geometry.point.distance (3,4) 
print ( result )

import geometry.point as gp
result = gp.distance (3,4) 
print ( result )

import geometry.line
result = geometry.line.lenth (3,4,5,6) 
print ( "len : ", result )
result = geometry.line.slope (3,4,5,6) 
print ( "slope : ", result )

import geometry.line as gl
result = gl.lenth (3,4,5,6) 
print ( "len : ", result )
result = gl.slope (3,4,5,6) 
print ( "slope : ", result )
```
```python=
#line.py
def distance ( x, y ):
    return ((x ** 2) + (y ** 2)) ** 0.5
```
```python=
#point.py
def lenth ( x1, y1, x2, y2 ):
    return (( x2 - x1 ) ** 2 + ( y2 - y1 ) ** 2) ** 0.5
def slope ( x1, y1, x2, y2 ):
    return (y2 - y1) / ( x2 - x1 )
```