物件 & 模組

2025.7.30 Python 語法課程

Richard Lai

課前補充 (?

一些複習與新東西

二維陣列 (two-dimensional list)

基本上就是一般的陣列,但每一個元素都是一個一維陣列

in python code

a = [[1, 2, 3], [4, 5, 6]]
print(a[0])
print(a[1])

b = a[0]
print(b)
print(a[0][2])

a[0][1] = 7
print(a)
print(b)

b[2] = 9
print(a[0])
print(b)

in python code

n = 3
m = 4
a = [[0] * m for i in range(n)]
# the first line of input is the number of rows of the array
n = int(input()) 
a = []
for i in range(n):
    row = input().split()
    for i in range(len(row)):
        row[i] = int(row[i])
    a.append(row)

建立

輸入二維陣列

複習相關連結

homework on last week

Exponentiation (指數) 解法

def power(a, n):
    if n == 0:
        return 1
    return power(a, n-1) * a

a = float(input())
n = int(input())

print(power(a, n))

題目:給定一個正實數 \(a\) 和一個非負整數 \(n\),計算 \(a^n\),但不能使用 ** 運算子或任何內建的函式 (像是 math.pow())

follow up: 有沒有辦法更有效率?

模組 (module)

能用現成的就用

  • Python 的一大特色

  • 有了模組,我們就能使用一些有的沒的功能,包含數據分析、機器學習、撰寫遊戲

  • 可以使用現存的或自己撰寫ㄉ

什麼是模組 (Module)

安裝套件 (Installation)

pip install [module]

幾點提醒:

  1. 建議搭配虛擬環境 (Virtual Environment) 使用,像是 conda, venv,避免發生衝突
  2. pip 預設會安裝最新版本的模組,不一定是你要的。

引入套件 (import)

# 最基本的 import
import random

# 簡化名稱
import numpy as np

random_number = random.randint(1, 10)
option = random.choice(["Adam", "Emma"])

a = np.array([(1, 2, 3), (4, 5, 6)])
  • as 可以為引入的套件取別名
  • 使用套建中的函式之前需要依照 module.[function] 的格式
     

只引入部份函式、變數

from random import randint, choice

random_number = randint(1, 10)
option = choice(["Adam", "Emma"])

這種寫法可以省略作為前綴的套件名稱
 

  1. 在相同資料夾創建另外一個檔案 (假設叫做 mymodule.py)
  2. 在 mymodule.py 中新增一些函式或變數
  3. 在你主要的程式終究可以用引入一般模組的方式,引入自己的套件!

自訂模組 (最基本的方法)

套件範例: qrcode 製作

import qrcode

text = input("請輸入網址: ")
path = input("請輸入檔名 ")

img = qrcode.make(text)
img.save(path)

img.show()
pip install pillow, qrcode

套件範例: 下載 youtube 影片

from pytubefix import YouTube
from pytubefix.cli import on_progress
 
url = input()
 
yt = YouTube(url, on_progress_callback = on_progress)
print(yt.title)
 
ys = yt.streams.get_highest_resolution()
ys.download()
pip install pytube, pytubefix

pytube 原專案在這,但我自己運行時會有網路上的問題,因此改成使用較新的 pytubefix

  • pygame: 遊戲設計

  • pandas: 數據分析

  • matplotlib: 繪製圖表

  • .....

其他超常用的套件

物件 (Object)

Everything is an object.

Class (類別)

可以比喻為一張藍圖,根據不同的屬性,可以建構出不同的物體。

物件 (Object)

  • Python 裡面所有東西都是物件!每個物件有屬於他們的變數、屬性、函式或方法
  • 可以由 Class 所定義
  • Object-Oriented Programming
  • 將物件 (Object) 視為程式的主體,透過類別這個概念,建立許多實例 (Instance),讓程式的可讀性與再利用性大幅提昇
  • 具有三種特性:
    • 繼承 (Inheritance) 使類別可以被重複利用
    • 多型 (Polymorphism) 讓一個類別可以同時傳承許多類別的功能
    • 封裝 (Encapsulation) 將屬性、方法包裝進同一個類別

物件導向程式設計 (OOP)

物件導向程式設計 (OOP)

建立類別

class Human():
    def __init__(self, life, age, hair, money):
        self.life = life
        self.age = age
        self.hair = hair
        self.money = money
  • __init__(): 初始化一個物件,self 是必要的參數,代表物件本體
  • self.life: 代表物件的一個屬性 (instance attributes)
  • life: init 函式中所傳入的參數
  • init: initialize / initialization 的簡寫

宣告實例 (instance)

a = Human(True, 25, "Blonde", 12345678)

print(a.life, a.age, a.hair, a.money)

取用一個物件的屬性 (attributes) 的方法是在 instance 名稱的後面加一點。修改或刪除也是

 

像是: instance.attr 這樣的格式

a.age = 50
del a.money

定義一些方法 (method)

class Human():
    def __init__(self, life, age, hair, money):
        self.life = life
        self.age = age
        self.hair = hair
        self.money = money
    def howOld(self):
        print(f"is {self.age} years old")

a = Human(True, 25, "Blonde", 12345678)

a.howOld()

函數的預設值 (default argument)

def greeting(name, country="German", words="Good morning"):
	print(f"Hello {name} from {country}, {words}")

greeting("Mike", "Canada", "What\'s up")

greeting("May", "Taiwan")
greeting("Maxwell")
class Human():
    def __init__(self, life, age, hair="Black", money=100):
        self.life = life
        self.age = age
        self.hair = hair
        self.money = money
    def howOld(self):
        print(f"is {self.age} years old")

mary = Human(False, 25)

mary.howOld()
class Human():
    def __init__(self):
        pass

物件 & 模組

By 賴昱錡

物件 & 模組

2025.7.30 Python 語法課程

  • 17