Gobby's Python 讀書會 - 「第十九章 成為 Python 鐵粉」決定版

Category Tech

繼上次的草稿後該來個決定版了

這次的內容非常的多,讀書會的一個小時是一定吸收不完的
但先聽過,知道 Python 有這些東西可以用,也許以後會有幫助

我會頻繁參照四年前寫的 Python Table Manners 系列
提到的工具稍微有些過期,這篇文章會補充新的工具
但概念本身是互通的

Where to find Python code

  • PyPI
    • Python Package Index
      • 讀作 Py-P-I
    • pip install <package> 預設會到 PyPI 找套件安裝
    • 遠古以前曾經叫做 "cheese shop"
      • 來自 Monty Python
  • GitHub Trend
    • GitHub 是目前主流的 Git 倉儲,在這可以找到最近流行的 Python 專案
  • Popular Python recipes
    • 這就真的是第一次看到了

Install package

  • pip
    • e.g., pip install pip
  • pipenv
  • system package management (Don't. Just Don't. Please)
    • mac: brew, ports
    • Linux: apt-get, yum, dpkg, zypper
    • Windows: Windows Installer
  • conda
  • 直接從原始碼建置
  • poetry
    • 包含打包並發布函式庫的功能
  • uv
  • pipx (just notice Josix wrote a blog post for it)
    • 主要用於安裝 Python 實作的指令列工具,而不是函示庫

pipenv, poetry 跟 pipx 更多的介紹可以參考 Python Table Manners - 虛擬環境和套件管理

IDE (plus interactive shell and editor)

  • IDLE

Python 自帶的編輯器,在終端機輸入 IDLE 就能開啟

IDLE.jpg

大致上學習曲線如下(PyCharm可以參考 IntelliJ)

learning-curve

👉 Python Table Manners 番外 - 編輯器

Documentation and naming

這章的標題「名稱與文件」,但內容主要在講註解跟命名
很微妙的翻譯
但如果對真的寫文件有興趣,可以參考 Python Table Manners - 文件

Type Hinting

👉 Python Table Manners - 程式碼風格 # 型別檢查 - mypy

除此之外,自從 Python 3.9,型別如 list, dict, set 都可以直接被使用
不用再從 typing 函式庫匯入 (i.e., from typing import List, Dict, Set)

example_list: list[int] = [1, 2, 3]

如果你用的是 Python 3.8 ,你可以在檔案最上方

from __future__ import annotations

如果你用的是 3.8 以前的版本,那你應該升級你的 Python
(3.7 在 2023 就已經不支援了)

Testing (and linting?)

Debugging

  • print
    • vars(): 列出變數的 __dict__
    • locals(): 列出局部變數
    • globals(): 列出全域變數
  • decorator
import functools
import logging


def debug(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("before function starts")
        result = func(*args, **kwargs)
        print("after function ends")
        return result

    return wrapper


@debug
def func():
    pass
  • pdb
    • 常用 pdb 指令
      • continue
      • skip
      • next
      • list
      • print
    • 中斷點
      • 在 Python 檔案中加入 breakpoint(),可以在執行時停在那行,並進入 pdb 互動式介面
# how to use pdb in terminal

## run pdb on file
pdb <file name>

## run pdb on module
pdb -m <module name>

Logging

  • logging
    • message: 日誌訊息
    • level: 日誌等級
    • logger
    • handler: 對日誌做額外的處理(e.g., 輸出成檔案)
    • formatter: 日誌格式
    • filter: 過濾特定日誌
import logging

logger = logging.getLogger(__name__)
logging.basicConfig(filename="example.log", encoding="utf-8", level=logging.DEBUG)
logger.debug("This message should go to the log file")
logger.info("So should this")
logger.warning("And this, too")
logger.error("And non-ASCII stuff, too, like Øresund and Malmö")

Optimization (sounds more like profiling)

  • "Python 通常很快"
    • 我不確定,即使身為一個 Python 忠貞的使用者,我認為很多人會認為這句話不成立 lol
  • time, timeit
    • 參考 Debugging decorator 的寫法,可以將它們實作成 decorator 或 context manager,計算函式執行時間,找出瓶頸

Algorithm and Data Structure

  • list comprehension 通常比較快
  • 這章也是很微妙,我不能說跟演算法、資料結構無關,但...就這?

Python Distributions

Source Control

  • Mercurial
  • Git
    • init
    • add
    • status
    • commit
      • commitizen 可以幫助你寫更好的提交訊息 (commit message)!
    • 👉 Basic Git Tutorial (雖然已經是 8 年前的文章了,但基礎概念應該是沒變太多吧...)

Distributing Python Program

  • 這章其實沒講什麼...
  • 可以研究看看怎麼將套件上傳到 PyPI

Learn more