###### [Python 教學/](https://hackmd.io/7-LP9CyOThOdkEbq44FLvw)
# 函式庫(套件)
> [name=VJ][time= 109,11,26]
> [name=HuiXillya][time= 110,12,2]
---
## 什麼是函式庫?
函式庫在Python 中叫做**套件**,意思是一樣的。
函式庫可以是一個文件,包含了一系列你想引用在你的目前程式中的函式。
---
## 建立套件
要建立一個套件(函式庫),只需將你想要的程式碼保存在一個副檔名為 `.py` 的文件中。
例如我們將上次寫出來用作印出直角三角形的程式碼存成 `mymodule.py` 。那麼這個套件就叫做 `mymodule`。
```python=
def rTr(n:int):
for i in range(n):
for j in range(i):
print('*',end='')
print()
```
---
#### 練習1
試著將上程式碼的函式寫成函式庫,並執行
>在本地新增文字檔,附檔名要叫 py
>記得要打檔案丟到colab旁邊的檔案區
---
## 引用套件
我們可以用 `import` 關鍵字來引用我們剛剛創建的 `mymodule` 套件,從而使得我們可以使用裡面的函式。
注意: 存檔時目錄要相同才能引用。
```python=
import mymodule
mymodule.rTr(5)
```
注意:當使用套件中的函式時,請使用語法:`mod.func()`。
---
## 套件中的變數
套件可以像上面包含函數,也可以包含各種類型的變數(串列、字典、物件等),當然也可以被引用。
例如我們將下面的字典存成 `mymodule.py`
```python=
person1 = {
"name": "John",
"age": 36,
"country": "Norway"
}
```
---
然後引用名為 `mymodule` 的套件,接著存取字典 `person1`。
```python=
import mymodule
a = mymodule.person1["age"]
print(a) #輸出: 36
```
---
#### 練習2
試著將上程式碼中的字典加入函式庫,並使用
---
#### 練習3
下載[NCHUIT.py](https://drive.google.com/file/d/1C3aTkZsC-Lr4Pn7AcxtKu4rox-mJO1L3/view?usp=sharing
)並執行其中的 hello 函式
---
#### 練習4
修改 [NCHUIT.py](https://drive.google.com/file/d/1C3aTkZsC-Lr4Pn7AcxtKu4rox-mJO1L3/view?usp=sharing
) 的 hello 使其呼叫時印出 'hello world!'
>.py用記事本或者vscode打開
---
## 重新命名套件
我們可以用 `as` 關鍵字來創建一個**別名**。通常用來縮短程式碼。
例如為剛剛函字典的套件 `mymodule` 創建一個名為 `mx` 的別名。
```python=
import mymodule as mx
a = mx.person1["age"]
print(a) #輸出: 36
```
---
## 列出所有可以用的東西
用 `dir()` 函數可以列出一個套件中所有的函數(或變數)。
```python=
import platform
x = dir(platform)
print(x)
```
注意:`dir()` 函數所有套件都可以用,自己存的套件也可以用。
---
#### 練習5
列出 NCHUIT 裡的所有東西
---
### help()
>有時候不是不會寫,只是需要一點點小小的提示
各位在使用function時會不會忘記要傳甚麼引數進去?
或者忘記會回傳甚麼
讓help幫幫你
```python=
help(print) #不要打括號,我們是把'print'傳入,不是呼叫
```
同時,也是你打到一半會跑出來的提示
![](https://i.imgur.com/7q4w5B9.png)
#### 練習6
查看 NCHUIT 的說明
之後看看裡面各種函式的說明
#### 練習7
新增 hello 的提示
>可跳過
>參考一下其他函式的寫法
---
## 內建套件
在Python中,有幾個內建套件,隨你引用。
例如引用並使用 `platform` 套件。
```python=
import platform
x = platform.system()
print(x)#輸出目前的作業系統
```
---
### random
https://docs.python.org/zh-tw/3/library/random.html
> random.seed(a=None, version=2)
> 初始化随机数生成器。
>
> 如果 a 被省略或为 None ,则使用当前系统时间。 如果操作系统提供随机源,则使用它们而不是系统时间(有关可用性的详细信息,请参阅 os.urandom() 函数)。
>random.randint(a, b)
>返回随机整数 N 满足 a <= N <= b。相当于 randrange(a, b+1)。
範例:
輸出隨機一個1~n的整數
```python=
import random
n=10
random.seed()
print(random.randint(1, n))
```
#### 練習8
假設骰子有1-6點,擲出每種點數的機率都是1/6
輸入整數n,回傳投n顆骰子的點數
#### 練習8.5
修改上述的程式碼,使之回傳n顆骰子擲m次的分布情形
### time
https://docs.python.org/zh-tw/3/library/time.html
>交給你們了,自己試試看
#### 練習9
倒數計時器
輸出n 至 0 (一秒輸出一個字)
>hint 搜尋'sleep'
## 安裝套件
```bash
pip˽install˽套件名稱1[˽套件名稱2˽...(選用)]
```
### 範例1 matplotlib
製圖作表
```python=
import matplotlib.pyplot as plt
dic={0:0}
for i in range(50):
dic[i]=i+1
plt.bar(list(dic.keys()),list(dic.values()), color='b')
plt.show()
```
#### 練習6
把剛剛練習8.5的數值放入圖表中
製作分布圖
### 範例2 requests && beautifulsoup4
可發送http請求,並解析
```bash=!
pip install --upgrade pip requests beautifulsoup4
```
在colab的環境下
上述指令前面都須加上驚嘆號
如:
```bash=!
! pip install --upgrade requests beautifulsoup4
```
#### 西洽爬蟲
```python3=
import requests
import bs4
respone = requests.get(url='https://www.ptt.cc/bbs/C_Chat/index17616.html')
respone.encoding = 'utf-8'
root = bs4.BeautifulSoup(respone.text, 'html.parser')
titles = root.find_all('div',class_='title')
for x in titles:
t = x.find('a')
if t:
print(t.string)
```
---
## 解除安裝套件
```bash=!
pip uninstall -y openpyxl tablepyxl requests beautifulsoup4 django line-bot-sdk Pillow IPython pytz numpy flask
```
###### 注意: 請不要解除安裝 pip
---
<style>hr{display:none;}</style>
{"metaMigratedAt":"2023-06-15T16:16:11.105Z","metaMigratedFrom":"YAML","title":"函式庫 - Python 教學","breaks":true,"description":"中興大學資訊研究社1101學期程式分享會主題社課","contributors":"[{\"id\":\"e86b6571-4dea-4aa4-ba20-ece559b0e015\",\"add\":12527,\"del\":7478},{\"id\":\"4c23290c-4304-45d6-9c21-163639f3ac69\",\"add\":2487,\"del\":3714}]"}