未命名

@classmethod 如果只是简单“调用类方法不用实例化”概括,那么这种描述(无论长短)和“为什么要在 Python3 头部添加 #coding: utf-8” 一样,没有意义。 补充:Python3 默认文件编码为 UTF-8 但是读写文件的时候默认是按文件原来编码来的,所以读写文件的时候补上 encoding 参数比较规范,而二进制文件则不需要。 1 2 with open(file, mode="r", encoding="utf-8") as f: content = f.read() 一句话描述 @classmethod:创建新实例时需要 数据校验/格式化。 推荐第一种写法,灵活度更高。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 class Shopping: """出门前检查要带的金额:20 <= money <= 100""" def __init__(self, money) -> None: self.money = money @classmethod def check(cls, money): if 20 <= money <= 100: return cls(money) else: raise "money not validate" # 创建实例化就校验 def __new__(cls, money): if 20 <= money <= 100: obj = object.

通过改 Host 加速 OneDrive 客户端上传下载速度

我是真的没想到在 3202 年这种方法居然有效。 OneDrive 在绝大部分地区只要能登陆上(登录域名被墙)还是能同步的,同步速度根据当地情况而定。 直连配置 但是 OneDrive 同步大文件一不留意就耗费梯子大量流量,所以根据官网:OneDrive 所需的 URL 及端口维护了一份 OneDrive 直连域名列表。相关登录域名依旧走代理,直连域名只作用于客户端上传/下载,可以根据 Clash 连接情况修改。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 payload: - 'onedrive.

批量下载一加云相册原图

难倒是不难,网上也有相关代码和教程。主要是这两个都有些实现问题,顺手再记录一下坑点。 为什么会有半小时过期的 Token 啊? 如果真有照片多的小白登陆进去一张张点击下载,拉到很下面结果半小时一到提示 Cookie 过期。重新登录进去又得滚动页面到原来的地方(滚动页面一次就几张)才能下载,很难不骂人。 listNormalPhotos 接口返回的不是原图链接 最上面的两个链接也提到了,只是 originalPhotoUrl 接口里面这个字段很有迷惑性。 获取图片 id 的时候有概率 status_code == 500 在网页上第一次点击相册请求 listNormalPhotos 接口或滚动页面加载新图的时候会出现 500。原理不明,代码不管加不加 time.sleep() 都会触发。 一次只能请求一百张 批量获取图片图片的 getRealPhotoUrls 接口只能传 100 个 id,而且还是这种形式: 1 2 3 data = { "ids": '["id1", "id2", ...]' } requests 重试 相关 Cookie 直接在 curlconverter 获取即可。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 import json import requests from collections import Counter from requests.

Linux systemctl disable service 不起作用的一个原因

即便是删除掉依赖的可执行文件 + systemctl disable --now vmess.service 重启,相关僵尸进程也会一直启动。 解决办法:请仔细检查目前在运行的服务配置里面是否存在 After 依赖。 1 2 3 4 5 6 7 8 9 10 11 12 [Unit] Description=Control Raspberry Pi with Telegram Bot After=network.target clash [Install] WantedBy=multi-user.target [Service] Type=simple WorkingDirectory=/home/pi/sh/raspbot ExecStart=/home/pi/pyenvs/tgbot/bin/python3 raspbot.py Restart=always

Python 开发优化实践

前天推送了一个不错的视频:【Code Review】传参的时候有这么多细节要考虑?冗余循环变量你也写过么? 日常开发中确实在 code review 也会提到视频里的一些点,这里记录一下。 传参 接触过 FastAPI 的 Schema Check 应该很熟悉 TypeHint 和 Pydantic 这种写法,尤其是参数校验在实际开发有多直观。说明文档固然重要,但是逻辑清晰、简洁美观的代码更胜一筹。 1 2 3 4 5 6 7 from datetime import datetime from typing import Tuple from pydantic import BaseModel class Delivery(BaseModel): timestamp: datetime dimensions: Tuple[int, int] 而反面示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 def process_data(is_checked: bool = False, **kwargs) -> None: if is_checked: for key, value in kwrags.