Python pip包管理使用技巧
0
2
2026年7月12日
日志工具
import logging
from logging.handlers import RotatingFileHandler
def setup_logger(name='app', log_file='app.log'):
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
console = logging.StreamHandler()
console.setLevel(logging.INFO)
console.setFormatter(formatter)
file_handler = RotatingFileHandler(
log_file, maxBytes=10*1024*1024, backupCount=5, encoding='utf-8'
)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
logger.addHandler(console)
logger.addHandler(file_handler)
return logger
logger = setup_logger()
装饰器工具集
import time
import functools
import logging
logging.basicConfig(level=logging.INFO)
def log(msg):
print(msg)
with open(LOG_FILE, "a", encoding="utf-8") as f:
f.write(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] {msg}
")
def timer(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
logging.info(f"{func.__name__} 耗时: {end - start:.4f}秒")
return result
return wrapper
def log_execution(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
logging.info(f"执行: {func.__name__}")
result = func(*args, **kwargs)
logging.info(f"完成: {func.__name__}")
return result
return wrapper
def retry(max_attempts=3, delay=1):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
for attempt in range(max_attempts):
try:
return func(*args, **kwargs)
except Exception as e:
if attempt == max_attempts - 1:
raise
time.sleep(delay)
return wrapper
return decorator
@timer
@log_execution
@retry(max_attempts=3)
def process_data():
time.sleep(0.1)
return "处理完成"
配置管理
import os
import json
from typing import Any
class Config:
def __init__(self, config_file='config.json'):
self.config_file = config_file
self._data = self._load()
def _load(self) -> dict:
if os.path.exists(self.config_file):
with open(self.config_file, 'r', encoding='utf-8') as f:
return json.load(f)
return {}
def get(self, key: str, default: Any = None) -> Any:
keys = key.split('.')
value = self._data
for k in keys:
if isinstance(value, dict) and k in value:
value = value[k]
else:
return default
return value
def set(self, key: str, value: Any):
keys = key.split('.')
data = self._data
for k in keys[:-1]:
if k not in data:
data[k] = {}
data = data[k]
data[keys[-1]] = value
self._save()
def _save(self):
with open(self.config_file, 'w', encoding='utf-8') as f:
json.dump(self._data, f, indent=2, ensure_ascii=False)
观察者模式
class Subject:
def __init__(self):
self._observers = []
def attach(self, observer):
self._observers.append(observer)
def detach(self, observer):
self._observers.remove(observer)
def notify(self, data=None):
for observer in self._observers:
observer.update(data)
class Observer:
def update(self, data):
pass
class EmailNotifier(Observer):
def update(self, data):
print(f"发送邮件通知: {data}")
class SMSNotifier(Observer):
def update(self, data):
print(f"发送短信通知: {data}")
迭代器模式
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.data):
value = self.data[self.index]
self.index += 1
return value
raise StopIteration
class MyCollection:
def __init__(self):
self.items = []
def add(self, item):
self.items.append(item)
def __iter__(self):
return MyIterator(self.items)
单例模式
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]
class Database(metaclass=SingletonMeta):
def __init__(self):
self.connection = None
技术分享,欢迎评论区交流讨论。
在线咨询
上一个应该是我,我买了一年,实在没价值,...