Amo Chen

Python - 用範例學 weakref 模組

Python 是 1 個有垃圾回收機制(garbage collection, 或簡稱 GC)的程式語言,簡而言之是一種自動的記憶體管理機制,當某些記憶體空間沒有任何程式用到時,就會被回收,然後釋放這些記憶體空間,避免記憶體越用越少,最後導致程式錯誤、無法執行等問題。

GC 機制是為了減少開發者的負擔,例如 C 語言就需要手動釋放記憶體空間(詳細請參閱 free() 函式),所以忘記釋放記憶體空間造成記憶體洩漏(memory leak)的問題屢見不鮮,但如果交給 GC 的話,就可以讓開發者不太需要考慮記憶體管理的問題,增加開發的效率也降低犯錯的機率。

而 Python 的垃圾回收機制,是使用一種稱為 reference counting 的技術實作。

Last updated on  Jul 28, 2024  by  Amo Chen  ‐ 7 min read

怎麼用演算法解開魔術方塊?

雖然我個人沒有在玩魔術方塊,不過朋友用心製作的 YT 影片還是吸引到我(聲音真的很有磁性XD 原來現在常用來解開魔術方塊的演算法稱為 kociemba, 這是由一位德國

Posted on  Sep 6, 2023  by  Amo Chen  ‐ 1 min read

Python threading.local() 解說

我們都知道多個執行緒(thread)之間會共用 Process 的記憶體,那你覺得以下範例程式的執行結果會是什麼呢?這是 2 個執行緒分別做 +1 與 -1 運算各 100,000 次的 Python 程式:

import threading


def count(thread_name, step=1):
    global v
    for i in range(0, 100000):
        v += 1 * step
    print(f'{thread_name} -> ', v, flush=True)


v = 0
t1 = threading.Thread(target=count, args=('t1', 1, ))
t2 = threading.Thread(target=count, args=('t2', -1, ))
t1.start()
t2.start()
t1.join()
t2.join()

這段範例程式的執行結果,就跟本文要解說的 threading.local() 有關。

Posted on  Sep 4, 2023  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 3 min read

白話文解說 ETL vs. ELT

如果做過 Data Engineer 應該都對這 2 個縮寫不陌生,畢竟每天的工作總結起來就是這 3 個英文字母: E: Extraction (擷取) T: Transformation (轉換) L: Load (載入) 先來談談 ETL 。 ETL 的起源比較

Posted on  Sep 4, 2023  by  Amo Chen  ‐ 2 min read

Python 好用套件 - docxtpl 把 docx 文件檔變樣板(template)

遙想以前在公家機關工作時,不管什麼部門都很喜歡設計各式各樣的 docx 檔,例如用 docx 檔做例行性的報表,每天填完之後寄去給上一層的部門進行彙整,這些東西做久了就會覺得無趣,後來我就用 VBA 把 docx 檔變成樣板,裡面有著一堆可以填充文字的 placeholder, 只要執行 VBA 就可以自動產生新的 docx 檔,把分分鐘的事情變成秒秒鐘。

不過 VBA 畢竟還是沒 Python 可愛宜人,不要再用 VBA 了,能夠用 Python 解決的,都要用 Python 解!卍解!

直接交給 Python 套件 docxtpl 吧!

Posted on  Sep 3, 2023  in  Python 模組/套件推薦  by  Amo Chen  ‐ 1 min read

Python 好用套件介紹 - cloudpickle (pickle 模組的鋼鐵裝)

你有沒有遇過某些資料或類別 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

Meta 怎麼將 Jupyter Notebook 變成可自動排程

大家都知道 Jupyter Notebook 非常好用,很適合用來開發 prototype 、跑數據分析、視覺化圖表等用途, Meta 也很仰賴 Jupyter Notebook 做數據分析、視覺化圖表等工作,而且很多要定期手動執行產

Posted on  Sep 2, 2023  by  Amo Chen  ‐ 2 min read