---
# System prepended metadata

title: 函式庫 - Python 教學
tags: [Python]

---

---
title: 函式庫 - Python 教學
description: 中興大學資訊研究社1101學期程式分享會主題社課
tags: Python
---

###### [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>