返回首页

Python速查 - MyTools在线工具

🧰 MyTools

Python 速查手册

全部
代码
说明
x = 10; y = "hello"
动态类型变量赋值,无需声明类型
a, b = 1, 2; a, b = b, a
多变量赋值与优雅交换
print(f"{x = }, {y!r}")
f-string 调试:x= 输出变量名和值
pi: float = 3.14
类型注解(仅提示,不强制)
if __name__ == '__main__': main()
作为脚本直接运行时才执行
x = None # 空值
None 表示空值,判断用 is None
True, False # 首字母大写
布尔值是 int 子类,True == 1
# 单行注释 """文档字符串"""
注释与模块/函数文档字符串
type(x), isinstance(x, int)
查看类型 / 类型检查
lst = [1, 2, 3]; lst.append(4)
列表:尾部追加 O(1)
lst.insert(0, 0); lst.extend([5, 6])
insert 头部插入 O(n);extend 合并列表
lst.pop(); lst.pop(0); lst.remove(3)
按索引弹出(默认末位)/ 按值删除
lst = [3, 1, 2]; lst.sort(reverse=True)
原地排序;sorted(lst) 返回新列表
lst = [0] * 5; m = [[0] * 3 for _ in range(3)]
初始化列表;二维列表必须用推导式
tup = (1, 2, 3); a, *rest = [1, 2, 3, 4]
元组不可变;星号解包收集剩余元素
d = {'a': 1}; d['b'] = 2
字典:键值对,查找 O(1)
d.get('x', 0) # 键不存在返回默认值
get 避免-KeyError
d.setdefault('k', []).append(1)
不存在则设默认值并返回,一行初始化列表
d1 | d2 # Py3.9+ 合并字典
管道符合并字典(后者覆盖前者)
for k, v in d.items(): ...
遍历键值对(keys()/values() 同理)
s = {1, 2, 3}; s.add(4); a & b | c - d
集合去重;支持交/并/差运算
from collections import deque; q = deque([1,2]); q.appendleft(0); q.popleft()
双端队列:两端操作均 O(1),适合做队列
from collections import Counter; Counter("aabbbc").most_common(2)
计数器:统计频率取前 N
from collections import defaultdict; dd = defaultdict(list); dd["k"].append(1)
带默认值字典:访问不存在的键自动初始化
f'我叫{name},今年{age}岁,{price:.2f}元'
f-string 格式化,:2f 保留两位小数
f'{n:,} {r:8.2%} {b:08b}'
千分位/百分比/二进制补零格式化
s.strip(); s.lstrip(); s.rstrip()
去除两端/左/右空白(可传字符集)
'a,b,c'.split(','); '-'.join(['a','b'])
分割与拼接字符串
s.replace('old', 'new'); s.startswith('x')
替换与前缀判断(endswith 同理)
s.upper(); s.lower(); s.title(); s.capitalize()
大小写转换
s.find('x'); 'x' in s; s.count('x')
查找(无则-1)/ 包含判断 / 计数
s[1:4]; s[::-1]; s[::2]
切片:区间 / 反转 / 步长取值
s.zfill(5); '42'.rjust(5, '0'); '3.14'.center(10, '*')
补零与对齐填充
'123'.isdigit(); 'abc'.isalpha(); 'a1'.isalnum()
字符类型判断
if x > 0: ... elif x == 0: ... else: ...
条件分支(注意缩进即语法)
y = '偶数' if n % 2 == 0 else '奇数'
三元条件表达式
for i, v in enumerate(lst, start=1): ...
遍历同时获取索引(从 1 开始计数)
for a, b in zip(lst1, lst2): ...
并行遍历多个序列(按最短截断)
for k, v in sorted(d.items(), key=lambda x: x[1], reverse=True): ...
按值降序遍历字典
while True: if done: break
while 循环与 break/continue
for-else: for x in lst: if hit: break else: ...
循环正常结束(未 break)时执行 else
match cmd: case "go" | "g": ... case _: ...
match 结构化匹配(Python 3.10+)
from itertools import product, combinations; product("01", repeat=3)
笛卡尔积/组合等迭代工具
def f(a, b=2, *args, **kwargs): ...
可变参数:args 收元组,kwargs 收字典
def f(*, key_only): ...
星号后为仅关键字参数,必须按名传递
def fib(n): return 1 if n < 2 else fib(n-1) + fib(n-2)
递归与条件表达式一行写法
from functools import lru_cache @lru_cache(maxsize=None) def fib(n): ...
缓存装饰器:记忆化递归提速
def deco(fn): def wrapper(*a, **kw): r = fn(*a, **kw) return r return wrapper
装饰器模板:包装函数增强行为
from functools import wraps @wraps(fn) def wrapper(...): ...
装饰器保留原函数名与文档
f = lambda x, y: x + y
匿名函数:适合作为 key 参数
sorted(lst, key=lambda x: x.age, reverse=True)
按对象属性排序
sorted(words, key=str.lower)
忽略大小写排序(str.lower 无需括号)
from functools import partial; int2 = partial(int, base=2)
偏函数:固定部分参数
def gen(): yield 1 yield 2
生成器:惰性逐个产出,省内存
def add(a: int, b: int) -> int: return a + b
函数类型注解(配合 typing/mypy)
class Dog: def __init__(self, name): self.name = name
类定义与构造方法
def __str__(self): return f"Dog({self.name})"
print 对象时的友好输出
def __repr__(self): ...
调试时的官方表示(无 __str__ 时兜底)
class Dog(Animal): super().__init__()
继承并调用父类方法
@classmethod def create(cls): return cls()
类方法:第一个参数是类,常作工厂
@staticmethod def util(): ...
静态方法:与类状态无关的工具函数
@property def area(self): return self._r ** 2
把方法伪装成只读属性
from dataclasses import dataclass @dataclass class P: x: float y: float = 0
数据类:自动生成 __init__/__repr__/__eq__
from dataclasses import field @dataclass class T: tags: list = field(default_factory=list)
dataclass 可变默认值必须用 field
__slots__ = ("x", "y")
限制实例属性并节省内存
def __len__(self); def __getitem__(self, i); def __eq__(self, o)
魔术方法:支持 len()/下标/比较
from enum import Enum class Color(Enum): RED = 1
枚举类型
with open('a.txt', encoding='utf-8') as f: text = f.read()
上下文管理器自动关闭文件;读全文
for line in f: ... lines = f.readlines()
逐行遍历大文件(省内存)/ 一次读所有行
with open('out.txt', 'w', encoding='utf-8') as f: f.write('hi')
写文件(w 覆盖 / a 追加)
import json json.dump(obj, f, ensure_ascii=False, indent=2)
写入 JSON(中文不转义、带缩进)
json.loads(s); json.dumps(obj, default=str)
JSON 字符串互转(default 处理不可序列化对象)
import csv with open("d.csv", newline="") as f: rows = csv.DictReader(f)
按字典方式读取 CSV
try: ... except (ValueError, KeyError) as e: ... finally: ...
异常捕获(多类型/别名/finally 必然执行)
raise ValueError("非法输入") from e
抛出异常并保留原始异常链
try: risky() except Exception: pass
吞掉异常(仅限明确意图,调试慎用)
import os; os.environ.get("KEY", "默认")
读取环境变量
[x * 2 for x in lst if x > 0]
列表推导式:映射 + 过滤
{k: v for k, v in pairs if v}
字典推导式
{x % 3 for x in range(100)}
集合推导式:自动去重
gen = (x * 2 for x in range(10**8))
生成器表达式:惰性求值不占内存
[f(x) for row in m for x in row]
嵌套循环推导式:展平二维列表
list(map(str, nums)); list(filter(None, lst))
map 映射 / filter 过滤(None 过滤假值)
sum(lst); max(lst, key=len); any(x > 0); all(x > 0)
聚合与全称/存在判断
list(zip(*matrix))
矩阵转置(星号解包 + zip)
from pathlib import Path Path("a") / "b.txt"; p.read_text(encoding="utf-8")
面向对象路径操作:拼接/读写一步到位
Path(".").glob("*.py"); p.exists(); p.stem; p.suffix
glob 匹配文件/存在性/文件名与后缀
import datetime datetime.date.today(); datetime.datetime.now()
当前日期与时间
datetime.datetime.strptime('2024-01-02', '%Y-%m-%d')
字符串解析为时间;strftime 为反向格式化
from datetime import timedelta dt + timedelta(days=7)
日期加减时间差
import re re.findall(r"\d+", s); re.sub(r"\s+", " ", s)
正则:提取所有匹配 / 替换
import random random.choice(lst); random.sample(lst, 3); random.random()
随机选取/抽样/[0,1) 随机数
import math math.ceil(x); math.floor(x); math.sqrt(2)
数学函数
import hashlib hashlib.sha256(data).hexdigest()
计算 SHA256 摘要
import time time.time(); time.sleep(1)
时间戳与休眠
import logging logging.basicConfig(level=logging.INFO)
标准日志(不要用 print 做生产日志)
import sys sys.argv; sys.path; sys.exit(1)
命令行参数/模块搜索路径/退出码
import argparse; argparse.ArgumentParser()
命令行参数解析
from typing import Optional, List # 3.9+ 可用 list[int]
类型提示常用工具
import unittest / pytest(第三方)
测试框架;pytest 断言更简洁
pip install -r requirements.txt
安装依赖清单
python -m venv .venv && source .venv/bin/activate
创建并激活虚拟环境(Windows 用 activate.bat)
pip freeze > requirements.txt
导出当前环境依赖
def bad(x, acc=[]): ... # 共享同一个列表 def good(x, acc=None): acc = acc or []
可变默认参数只创建一次,用 None 代替
a = [1, 2]; b = a; b.append(3) # a 也变了 b = a.copy()
赋值只是引用,浅拷贝用 copy()/list()
import copy; copy.deepcopy(nested)
嵌套结构必须深拷贝,浅拷贝只复制第一层
a = 256; b = 256; a is b # True a = 257; b = 257; a is b # 可能 False
is 只比身份;小整数缓存导致假象,值比较用 ==
fns = [lambda: i for i in range(3)] # 全是 2 fns = [lambda i=i: i for i in range(3)] # 0,1,2
闭包捕获变量本身,用默认参数固化当前值
0.1 + 0.2 == 0.3 # False from decimal import Decimal; Decimal('0.1') + Decimal('0.2')
浮点精度问题,金额计算用 Decimal
s = input() # 'abc' int(s) # ValueError
字符串转数字前注意校验(isdigit/try)
lst = [1, 2, 3] for x in lst: lst.remove(x) # 跳元素!
遍历时修改列表会跳过元素,应遍历副本
d = {}; k = [1] d[k] = 1 # TypeError
dict 键必须可哈希(不可变),列表不行用元组
except Exception as e: print(e.args)
异常对象不是字符串,取信息用 args 或 str(e)
1 < x < 10 # 链式比较 round(2.5) == 2 # 银行家舍入
round 是四舍六入五取偶,不是四舍五入

Python 速查:语法要点、标准库常用模块与常见陷阱(可变默认参数、浅拷贝等)的速查页,写代码卡壳与面试复习两用。

适用场景

  • 列表/字典推导式、切片语法的快速确认
  • collections、itertools、datetime 常用用例速查
  • 复习经典陷阱:可变默认参数、is 与 == 的区别

常见问题

Python 最容易踩的坑是什么?

可变对象作默认参数(def f(x=[]) 的列表会跨调用共享)、循环变量闭包捕获、浅拷贝与深拷贝混淆。速查表的"陷阱"部分就是为这些准备的。

Python 2 的资料还能看吗?

Python 2 已停止维护(2020),语法与库多有差异。看旧资料时注意 print 语句、整除、字符串编码都和 Python 3 不同,以 Python 3 为准。

相关工具