Appearance
Python 速记表
基础语法
Hello World & 注释
# Hello Worldprint("Hello, World!")# 单行注释"""多行注释(文档字符串)可以换行"""def function(): """ 函数文档注释 Args: param: 参数说明 Returns: 返回值说明 """ pass输入输出
# 输出print("Hello, World!")print("Name:", name, "Age:", age)print(f"Hello, {name}") # f-string# 输入name = input("Enter your name: ")age = int(input("Enter your age: "))变量与常量
声明方式
x = 10name = "Alice"is_valid = True# 多重赋值a, b, c = 1, 2, 3x = y = z = 0# 解包first, *rest = [1, 2, 3, 4]作用域
global_var = "global" # 全局作用域def outer(): outer_var = "outer" # 外层函数作用域 def inner(): inner_var = "inner" # 内层函数作用域 global global_var # 声明使用全局变量 nonlocal outer_var # 声明使用外层变量类型注解
Python 3.5+
name: str = "Alice"age: int = 25scores: list[int] = [90, 85, 88]data: dict[str, int] = {"a": 1}def greet(name: str) -> str: return f"Hello, {name}"数据类型
基本类型
# 数字x = 42 # inty = 3.14 # floatz = 3 + 4j # complex# 字符串s = "hello"s = 'world's = """multiline"""# 布尔b = Trueb = False# Nonen = None复合类型
# 列表(可变)lst = [1, 2, 3]# 元组(不可变)tup = (1, 2, 3)# 字典dic = {"key": "value"}# 集合st = {1, 2, 3}# 范围rng = range(10)类型转换
int("42")float("3.14")str(42)bool(1)list("hello")tuple([1, 2, 3])dict([("a", 1), ("b", 2)])set([1, 2, 2, 3])类型检查
type(value)isinstance(value, int)isinstance(value, (int, float))# typing 模块from typing import List, Dict, Optionaldef func(x: Optional[int]) -> List[str]: pass运算符
算术运算符
+ - * / # 加减乘除// # 整除% # 取模** # 幂运算比较运算符
== != # 相等、不等> < >= <= # 大小比较is is not # 身份比较in not in # 成员测试逻辑运算符
and or not # 逻辑与、或、非# 短路求值result = x and yresult = x or y位运算符
& | ^ ~ # 按位与、或、异或、非<< >> # 左移、右移赋值运算符
= += -= *= /= //= %= **=&= |= ^= <<= >>=特殊运算符
# 海象运算符 (Python 3.8+)if (n := len(data)) > 10: print(f"Large dataset: {n}")# 解包运算符*args, **kwargs字符串
字符串格式化
name = "Alice"age = 25# f-string (Python 3.6+)msg = f"Name: {name}, Age: {age}"msg = f"{value:.2f}" # 格式化# format()msg = "Name: {}, Age: {}".format(name, age)msg = "{0} {1}".format("Hello", "World")# % 格式化msg = "Name: %s, Age: %d" % (name, age)字符串方法
s.upper()s.lower()s.capitalize()s.title()s.strip()s.lstrip()s.rstrip()s.split(' ')s.join(list)s.replace('old', 'new')s.find('sub')s.index('sub')s.count('sub')s.startswith('pre')s.endswith('suf')字符串检查
s.isdigit()s.isalpha()s.isalnum()s.isupper()s.islower()s.isspace()正则表达式
import rere.match(r'^\d+', s)re.search(r'pattern', s)re.findall(r'\d+', s)re.sub(r'old', 'new', s)re.split(r'\s+', s)集合数据结构
列表基础
lst = [1, 2, 3]lst = list(range(5))lst.append(4)lst.insert(0, 0)lst.extend([5, 6])lst.remove(2)lst.pop()lst.pop(0)lst.clear()lst.sort()lst.reverse()列表推导式
# 基本形式squares = [x**2 for x in range(10)]# 带条件evens = [x for x in range(20) if x % 2 == 0]# 嵌套matrix = [[i+j for j in range(3)] for i in range(3)]列表操作
lst[0] # 索引lst[-1] # 倒数第一个lst[1:3] # 切片lst[::2] # 步长lst[::-1] # 反转len(lst)sum(lst)max(lst)min(lst)lst.count(item)lst.index(item)字典操作
d = {"key": "value"}d = dict(a=1, b=2)d["key"] = "new"d.get("key", default)d.setdefault("key", default)d.pop("key")d.update({"k2": "v2"})d.keys()d.values()d.items()集合操作
s = {1, 2, 3}s = set([1, 2, 3])s.add(4)s.remove(2)s.discard(5) # 不存在也不报错# 集合运算s1 | s2 # 并集s1 & s2 # 交集s1 - s2 # 差集s1 ^ s2 # 对称差元组与队列
# 元组(不可变)tup = (1, 2, 3)a, b, c = tup# 队列from collections import dequeq = deque([1, 2, 3])q.append(4)q.appendleft(0)q.pop()q.popleft()控制流
if / elif / else
if condition: passelif other_condition: passelse: pass# 三元表达式result = 'yes' if condition else 'no'match-case
Python 3.10+
match value: case 1: print("one") case 2 | 3: print("two or three") case _: print("other")for 循环
for i in range(10): print(i)for item in collection: print(item)for i, item in enumerate(collection): print(i, item)for key, value in dict.items(): print(key, value)while 循环
while condition: pass# while-elsewhile condition: passelse: print("Loop completed normally")跳转语句
break # 退出循环continue # 跳过本次迭代pass # 空操作return value # 返回值函数
函数定义
def greet(name): return f"Hello, {name}"# Lambda 函数square = lambda x: x ** 2add = lambda a, b: a + b参数
# 位置参数def func(a, b): pass# 默认参数def func(a, b=10): pass# 可变参数def func(*args, **kwargs): pass# 关键字参数def func(a, *, b, c): # b, c 必须用关键字传递 pass高阶函数
def apply(func, value): return func(value)def multiplier(n): return lambda x: x * n# 内置高阶函数map(func, iterable)filter(func, iterable)sorted(iterable, key=func)装饰器
def decorator(func): def wrapper(*args, **kwargs): print("Before") result = func(*args, **kwargs) print("After") return result return wrapper@decoratordef my_function(): pass生成器
def fibonacci(n): a, b = 0, 1 for _ in range(n): yield a a, b = b, a + b# 生成器表达式gen = (x**2 for x in range(10))面向对象
类定义
class Person: species = "Human" # 类变量 def __init__(self, name, age): self.name = name # 实例变量 self.age = age def greet(self): return f"Hello, I'm {self.name}" @classmethod def from_birth_year(cls, name, year): return cls(name, 2024 - year) @staticmethod def is_adult(age): return age >= 18继承
class Student(Person): def __init__(self, name, age, grade): super().__init__(name, age) self.grade = grade def study(self): print(f"{self.name} is studying")特殊方法
class MyClass: def __init__(self): # 构造 pass def __str__(self): # 字符串表示 return "MyClass" def __repr__(self): # 官方表示 return "MyClass()" def __len__(self): # len() return 0 def __getitem__(self, key): # [] pass def __call__(self): # () pass属性装饰器
class Circle: def __init__(self, radius): self._radius = radius @property def radius(self): return self._radius @radius.setter def radius(self, value): if value < 0: raise ValueError("Radius must be positive") self._radius = value @property def area(self): return 3.14 * self._radius ** 2dataclass
Python 3.7+
from dataclasses import dataclass@dataclassclass Person: name: str age: int email: str = "" def greet(self): return f"Hello, I'm {self.name}"错误处理
try/except/finally
try: result = 10 / 0except ZeroDivisionError as e: print(f"Error: {e}")except (TypeError, ValueError): print("Type or Value error")except Exception as e: print(f"Unexpected: {e}")else: print("No exception")finally: print("Always executed")异常类型
ExceptionValueErrorTypeErrorKeyErrorIndexErrorAttributeErrorFileNotFoundErrorZeroDivisionErrorImportError抛出异常
raise ValueError("Invalid value")raise Exception("Something went wrong")# 自定义异常class CustomError(Exception): passraise CustomError("Custom message")上下文管理器
# with 语句自动处理资源with open('file.txt', 'r') as f: content = f.read()# 自定义上下文管理器class MyContext: def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): pass文件操作
读取文件
# 读取全部with open('file.txt', 'r') as f: content = f.read()# 逐行读取with open('file.txt', 'r') as f: for line in f: print(line.strip())# 读取所有行lines = f.readlines()写入文件
# 覆盖写入with open('file.txt', 'w') as f: f.write('Hello\n')# 追加写入with open('file.txt', 'a') as f: f.write('World\n')# 写入多行lines = ['line1\n', 'line2\n']f.writelines(lines)路径操作
from pathlib import Pathp = Path('file.txt')p.exists()p.is_file()p.is_dir()p.read_text()p.write_text('content')p.parentp.namep.stemp.suffixJSON 操作
import json# 序列化json_str = json.dumps(data)json_str = json.dumps(data, indent=2)# 反序列化data = json.loads(json_str)# 文件操作with open('data.json', 'w') as f: json.dump(data, f, indent=2)with open('data.json', 'r') as f: data = json.load(f)模块与包
导入语法
import moduleimport module as aliasfrom module import functionfrom module import *from package.module import Class创建模块
# mymodule.pydef my_function(): passPI = 3.14# 使用import mymodulemymodule.my_function()包结构
mypackage/ __init__.py module1.py module2.py subpackage/ __init__.py module3.py并发编程
多线程
import threadingdef worker(): print("Working...")thread = threading.Thread(target=worker)thread.start()thread.join()# 线程锁lock = threading.Lock()with lock: # 临界区多进程
import multiprocessingdef worker(num): print(f"Worker {num}")if __name__ == '__main__': processes = [] for i in range(5): p = multiprocessing.Process(target=worker, args=(i,)) processes.append(p) p.start() for p in processes: p.join()异步编程
import asyncioasync def fetch_data(): await asyncio.sleep(1) return "data"async def main(): result = await fetch_data() print(result)asyncio.run(main())标准库精选
常用模块
os # 操作系统接口sys # 系统相关re # 正则表达式json # JSON 处理datetime # 日期时间math # 数学函数random # 随机数collections # 容器类型itertools # 迭代工具functools # 函数工具datetime
from datetime import datetime, timedeltanow = datetime.now()today = datetime.today()formatted = now.strftime('%Y-%m-%d %H:%M:%S')parsed = datetime.strptime('2024-01-01', '%Y-%m-%d')# 时间计算tomorrow = now + timedelta(days=1)collections
from collections import Counter, defaultdict, deque# 计数器counter = Counter([1, 1, 2, 3, 3, 3])# 默认字典dd = defaultdict(list)dd['key'].append('value')# 双端队列dq = deque([1, 2, 3])最佳实践
代码风格 (PEP 8)
# 使用 4 空格缩进# 变量和函数用 snake_case# 类名用 PascalCase# 常量用 UPPER_CASE# 导入顺序:标准库、第三方库、本地模块import osimport sysimport numpy as npfrom mymodule import func性能优化
# 使用列表推导式而非循环squares = [x**2 for x in range(100)]# 使用生成器节省内存gen = (x**2 for x in range(1000000))# 使用集合进行查找s = set(large_list)if item in s: # O(1)常见陷阱
# 可变默认参数def bad(lst=[]): # 错误 lst.append(1) return lstdef good(lst=None): # 正确 if lst is None: lst = [] lst.append(1) return lst# 循环变量泄露for i in range(3): passprint(i) # i 仍可访问工具链
包管理器
# pippip install packagepip install -r requirements.txtpip freeze > requirements.txt# poetrypoetry add packagepoetry install# condaconda install package虚拟环境
# venvpython -m venv venvsource venv/bin/activate # Linux/Macvenv\Scripts\activate # Windows# virtualenvvirtualenv venv测试框架
# pytestpytestpytest test_module.py# unittestpython -m unittest discover代码质量
# black (格式化)black .# flake8 (语法检查)flake8 .# mypy (类型检查)mypy .# pylint (代码分析)pylint module.py