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",
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")
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()

timmy / 模擬數位時鐘的運行

0 likes
0 forks
1 files
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
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):
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):
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();