timmy / 工廠方法模式的本地化翻譯
0 likes
0 forks
1 files
Last active 10 months ago
這段 Python 程式碼使用 工廠方法模式(Factory Method Pattern)來實現 多語言在地化(Localization)。它定義了 English(英文)、Greek(希臘文)、Chinese(中文)三種 Localizer 類別,透過 get_localizer(language) 方法 根據指定語言動態選擇適當的翻譯器。 執行時,程式會將 "dog parrot cat bear" 逐字進行翻譯,並輸出對應語言的結果。這適用於 國際化(i18n)開發、跨語系應用程式、系統訊息翻譯 等場景,讓程式能 彈性支援不同語言。
| 1 | #!/usr/bin/env python |
| 2 | # -*- coding: utf-8 -*- |
| 3 | |
| 4 | |
| 5 | """ |
| 6 | factory.py: 工廠方法模式的範例程式 |
| 7 | |
| 8 | Author: Timmy |
| 9 | Copyright: Copyright 2022, Timmy |
| 10 | 授權方式: MIT |
timmy / DNSBL 黑名單查詢工具
0 likes
0 forks
1 files
Last active 10 months ago
這段程式碼是一個 DNSBLChecker 工具,用於檢查指定的 IP 是否被列入常見的 DNS 黑名單(DNSBL)。支持動態添加或移除 DNSBL 提供者,並顯示檢查結果,包括列入的黑名單列表。
| 1 | import dns.resolver |
| 2 | |
| 3 | class DNSBLChecker: |
| 4 | def __init__(self, providers=None): |
| 5 | """ |
| 6 | 初始化 DNSBLChecker,允許自定義 DNSBL 提供者列表。 |
| 7 | :param providers: DNSBL 提供者列表 (可選,默認為常用黑名單提供者) |
| 8 | """ |
| 9 | self.providers = providers or [ |
| 10 | "zen.spamhaus.org", |
timmy / 使用 lambda 和 map() 進行列表轉換
0 likes
0 forks
1 files
Last active 10 months ago
這段 Python 程式碼使用 lambda 匿名函式 搭配 map() 函式,對 列表 numbers 中的每個數字進行倍數運算。lambda x: x * 2 定義了一個簡單的 匿名函式,然後透過 map(double, numbers) 讓列表中的每個數字都經過該函式處理,最終輸出 [2, 4, 6, 8, 10]。這種寫法適用於 資料轉換、函式式編程與簡化程式碼結構,提高可讀性與執行效率。
| 1 | numbers = [1, 2, 3, 4, 5] |
| 2 | |
| 3 | # 使用普通的函數定義 |
| 4 | def double(x): |
| 5 | return x * 2 |
| 6 | |
| 7 | # 使用 Lambda 表達式定義 |
| 8 | double = lambda x: x * 2 |
| 9 | |
| 10 | # 使用 map() 函數將 Lambda 表達式應用到列表中的每個元素 |
timmy / Loguru 日誌管理與錯誤追蹤
0 likes
0 forks
1 files
Last active 10 months ago
這段 Python 程式碼使用 loguru 來 記錄並管理日誌訊息,支援 不同級別(INFO、DEBUG、WARNING、ERROR、CRITICAL)的日誌,並可輸出至 終端機 (sys.stderr) 或檔案 (log.txt、debug.txt)。它還示範了 顏色標記 (opt(colors=True))、錯誤追蹤 (logger.exception())、格式化 (opt(record=True)) 及自訂篩選條件 (filter=only_debug_filter)。此外,腳本還包含了一個 除法函式 (divide()),並處理除數為 0 的異常。這適用於 伺服器監控、錯誤記錄、程式偵錯及系統日誌管理,能夠提升 日誌的可讀性與除錯效率。
| 1 | import sys |
| 2 | |
| 3 | from loguru import logger # 引入logger套件 |
| 4 | |
| 5 | logger.remove() # 移除現有的logger設定 |
| 6 | logger.add(sys.stderr, level="INFO") # 將logger設定加入到stderr中,並設定level為"INFO" |
| 7 | # logger.add(sys.stderr, level="WARNING") |
| 8 | # logger.add(sys.stderr, level="ERROR") |
| 9 | # logger.add(sys.stderr, level="TRACE") |
timmy / 使用 pretty_errors 美化 Python 錯誤訊息
0 likes
0 forks
1 files
Last active 10 months ago
此程式透過 pretty_errors 讓錯誤訊息更易讀,並觸發除零錯誤 (ZeroDivisionError),適用於開發除錯與錯誤診斷。
| 1 | import pretty_errors |
| 2 | |
| 3 | |
| 4 | def division_by_zero(): |
| 5 | 1 / 0 |
| 6 | |
| 7 | |
| 8 | if __name__ == "__main__": |
| 9 | division_by_zero() |
Last active 10 months ago
此程式模擬數位時鐘,使用 datetime 初始化當前時間,透過 Clock 類別每秒遞增時間並即時顯示,適用於時間管理與計時應用。
| 1 | from time import sleep |
| 2 | from datetime import datetime |
| 3 | |
| 4 | class Clock(object): |
| 5 | """Digital Clock""" |
| 6 | |
| 7 | def __init__(self, hour=0, minute=0, second=0): |
| 8 | """Initialization method |
| 9 | |
| 10 | :param hour: Hour |
timmy / 策略模式在購物車計價中的應用
1 likes
0 forks
1 files
Last active 10 months ago
這段程式碼實作「策略模式(Strategy Pattern)」,用於計算購物車的總金額,並允許 根據不同的定價策略(如正常價格或折扣價格) 來計算最終價格。
| 1 | from abc import ABC, abstractmethod |
| 2 | |
| 3 | # 策略介面 |
| 4 | class PricingStrategy(ABC): |
| 5 | @abstractmethod |
| 6 | def calculate_price(self, price): |
| 7 | pass |
| 8 | |
| 9 | # 具體策略類 |
| 10 | class NormalStrategy(PricingStrategy): |
timmy / 策略模式在資料管理中的應用
0 likes
0 forks
1 files
Last active 10 months ago
此範例展示策略模式在 YAML 和 JSON 資料處理中的應用,DataHandlerStrategy 定義通用的讀寫介面,並透過 YamlHandler 和 JsonHandler 來處理不同格式的資料。DataManager 負責管理資料存取,並可動態切換處理策略,提高靈活性與可維護性。
| 1 | import time |
| 2 | import yaml |
| 3 | import json |
| 4 | from abc import ABC, abstractmethod |
| 5 | import streamlit as st |
| 6 | |
| 7 | # 策略介面 |
| 8 | class DataHandlerStrategy(ABC): |
| 9 | @abstractmethod |
| 10 | def read_data(self, path): |
timmy / 使用 PyWebIO 進行即時時間顯示
0 likes
0 forks
1 files
Last active 10 months ago
此範例展示如何使用 PyWebIO 及 JavaScript 顯示即時更新的時間。透過 put_html() 方法嵌入 HTML 和 JavaScript,並使用 setInterval() 讓時間每秒更新一次,使 PyWebIO 應用能夠提供更動態的用戶體驗。
| 1 | from pywebio import start_server |
| 2 | from pywebio.output import put_html |
| 3 | import datetime |
| 4 | |
| 5 | def use_scope_case3(): |
| 6 | put_html(''' |
| 7 | <div id="time"></div> |
| 8 | <script> |
| 9 | function updateTime() { |
| 10 | document.getElementById("time").innerText = new Date().toLocaleString(); |