文章

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

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

Python 好用套件介紹 - structlog

大家初次使用 Python 的 logging 模組時,應該都跟我同樣困惑過,例如下列程式碼:

import logging

log = logging.getLogger(__name__)
log.info('Hello')

我們會預期上述程式碼要列印 Hello 的字串,然而事實是不會。

這是由於 Python logging 模組預設的 log level 為 WARNING , 所以只有 WARNING , ERROR 以及 CRITICAL 才會顯示。

所以使用 logging 模組通常都要額外做一些設定才行,這不免需要讀一下 Python 官方文件。(這不是 Python 的問題,只是設計哲學不同)

那麼,有沒有什麼套件比起內建的 logging 模組更直覺好用呢?

答案是「有」,那就是本文要介紹的 structlog 套件。

Posted on  Aug 30, 2023  in  Python 模組/套件推薦 , Python 程式設計 - 初階  by  Amo Chen  ‐ 4 min read

VS Code 擴充推薦 - Live Sass Compiler

Sass 的出現,改善 CSS 語法的不足, Sass 可以更像寫程式一樣定義變數、函數,也可以使用 if-else, for 等程式常見的邏輯控制,甚至模組化都可以做到,最後還可以編譯輸出 CSS, 讓前端工程師的工作效率提升到一個全新檔次。

知名的前端框架 Bootstrap 即使用 Sass 開發的,足見 Sass 的實用性!

本文將如何在 VS Code 中使用 Live Sass Compiler 擴充將 Sass 編譯成 CSS 。

Posted on  Aug 26, 2023  in  VS Code , VS Code 擴充推薦  by  Amo Chen  ‐ 2 min read

VS Code 擴充推薦 - Numbered Bookmarks

個人以往長時間使用 Vim 作為主要編輯器使用,但是現在除了 Vim 之外,也會使用 VS Code 進行開發。

Vim 有個功能稱為 bookmark , 可以讓人在特定行做一個書籤,等到需要的時候,可以使用快捷鍵/指令迅速跳到該書籤,可以節省切換的時間,相當高效。

不過使用 VS Code 之後就失去這個功能,所幸還是可以安裝擴充解決問題。

這個擴充稱為 Numbered Bookmarks 推薦給大家使用。

Posted on  Aug 25, 2023  in  VS Code , VS Code 擴充推薦  by  Amo Chen  ‐ 2 min read