Python 3.12 新 decorator — override
Python 3.12 typing 模組推出 1 個新的 @override
decorator 。
本文將介紹其用途與教學。
Posted on Oct 17, 2023 in Python 程式設計 - 中階 by Amo Chen ‐ 1 min read
Python 3.12 typing 模組推出 1 個新的 @override
decorator 。
本文將介紹其用途與教學。
Posted on Oct 17, 2023 in Python 程式設計 - 中階 by Amo Chen ‐ 1 min read
__slots__
是 Python 類別必須認識的屬性,這個屬性為我們帶來節省記憶體資源以及增加存取(access)類別屬性(attribute)效率的好處,但相對地,它也犧牲原本方便擴充類別屬性的易用性。
總的來說,它是寫出高效率 Python 程式碼的一環,平常用不到它沒有關係,但如果要榨出更多記憶體資源以及效能的話, __slots__
是一定能派上用場。
本文將透過各種範例認識 __slots__
並學會如何運用它。
Posted on Oct 16, 2023 in Python 程式設計 - 中階 by Amo Chen ‐ 4 min read
Python 的物件導向程式設計(OOP)有 2 個一定要懂的東西:
如果不懂得這 2 個東西,就無法徹底解放類別(class)的力量,甚至可能導致寫出不夠彈性而且冗長的程式碼。
super() + MRO
= 超級瑪利歐?(誤
本文將從 super()
函式開始講解,說明 Python 的 MRO(Method Resolution Order) ,並介紹 MRO 的特性在實務上的應用。
如果你無法正確回答以下範例結果的執行結果,那麽推薦你看完本文:
class Parent(object):
NAME = 'Parent'
def __str__(self):
return self.NAME
class Child(Parent):
NAME = 'Child'
def __str__(self):
return super().__str__()
c = Child()
print(c)
正確答案為: Child
Posted on Oct 6, 2023 in Python 程式設計 - 中階 by Amo Chen ‐ 6 min read
Python 3.8 之後 typing 模組 新增 1 個 typing.Protocol 的 class 可以使用,這個 class 很適合用來給一些有實作特定方法的 class 們做 type annotation 。
舉個常見的交通工具作為例子,假設我們有 1 個函數接受任何有實作 move()
方法的 instance:
def move(x):
x.move()
這時候可以用 typing.Protocol 將參數 x
加上 1 個 type hint, 讓彼此知道此處不管型別,只管是否有實作 move()
方法:
from typing import Protocol
class Movable(Protocol):
def move(self):
...
def move(x: Movable):
x.move()
加上 typing.Protocol 是否看起來清晰很多?
Posted on Sep 25, 2023 in Python 程式設計 - 中階 by Amo Chen ‐ 4 min read
這陣子做記憶體用量相關的研究時,就在想怎麼視覺化(visualize) Python 執行時隨時間變化的記憶體用量,當然,步驟越簡單越好。
查了才知道,知名的 memory_profiler 已經把這件事情搞定。
一起來看怎麼畫 Python 記憶體用量圖吧!
Posted on Sep 11, 2023 in Python 模組/套件推薦 , Python 程式設計 - 中階 by Amo Chen ‐ 2 min read
你有沒有遇過某些資料或類別 pickle 之後,之後要 unpickle 時出現 AttributeError
的情況,例如:
AttributeError: Can't get attribute 'A' on <module '__main__' (built-in)>
這是由於 pickle 使用的是 serialization by reference 技術,所以某些資料或類別它不會放到序列化的結果,因此這種問題可以試看看用 cloudpickle 解決。
一起看看 cloudpickle 與 pickle 模組之間的差異,以及它如何能解決你的問題吧!
Posted on Sep 3, 2023 in Python 模組/套件推薦 , Python 程式設計 - 中階 by Amo Chen ‐ 2 min read
用範例輕鬆學 Python multiprocessing 模組 一文中提到 4 種 IPC(Inter Process Communication)方法,分別是:
除了上述幾種方式之外, Python 也有提供其他方式滿足開發者對於 IPC(Inter Process Communication) 的相關需求,本文將額外介紹 Pipe, Queue, Array, RawArray 4 種方式。
Posted on Aug 7, 2023 in Python 程式設計 - 中階 by Amo Chen ‐ 5 min read
有時候開發功能不需要從頭寫到尾,利用他人開發的函式庫(library), API 之外,也可以整合既有的指令工具,不僅可以節省開發時間,也能夠完成需求。
我的碩士論文就是用 Python 作為膠水語言整合各種指令工具所完成的, Python 的 subprocess 模組在其中扮演不可獲缺的角色, subprocess 模組讓人可以執行各種指令,例如常見的 awk, sort, sed, uniq 等指令,並擷取其輸出(stdout / stderr),讓 Python 程式可以讀取,並進一步做其他處理。
本文將介紹 Python subprocess 模組的使用方法,以及應該注意的資安問題。
Posted on Jun 16, 2023 in Python 程式設計 - 中階 by Amo Chen ‐ 5 min read