1. Python注释代码的说明书写代码不写注释就像组装家具不看说明书——迟早要出问题。Python注释就是程序员给自己和同事留下的使用说明它们不会被计算机执行但对人类理解代码至关重要。1.1 单行注释简洁的旁白单行注释以#开头就像给代码加的即时贴。我习惯在复杂逻辑旁用单行注释说明# 计算用户折扣VIP打8折普通会员打9折 discount 0.8 if is_vip else 0.9实际项目中我见过最长的单行注释有200多个字符——那简直是段微型小说。建议单行注释控制在80字符内可以用多个#注释块拆分长说明。1.2 多行注释详细的文档用三个双引号包裹的是多行注释通常用于函数功能说明模块整体描述复杂的算法解释 该函数实现快速排序算法 参数 data: 待排序列表 reverse: 是否降序默认False 返回值 排序后的新列表 注意会创建临时列表大数组可能内存溢出 有个真实案例我曾接手一个没有多行注释的排序函数花了3小时才搞明白那是个改良版冒泡排序如果有注释可能3分钟就够了。2. 转义字符文本的魔法符号转义字符就像键盘上的快捷键\加上特定字母就能实现特殊效果。最常用的有2.1 基础转义字符print(换行\n效果) # \n 换行 print(制表\t符) # \t 横向制表 print(回退\b键) # \b 退格(删除前一个字符) print(原始路径C:\\Users) # \\ 表示反斜杠特别提醒Windows路径中的反斜杠需要转义或者直接用原始字符串# 两种等效写法 path1 C:\\Users\\Documents\\file.txt path2 rC:\Users\Documents\file.txt # r前缀表示原始字符串2.2 不常见的转义技巧\a响铃会让电脑滴一声\ooo八进制ASCII码如\101是字母A\xhh十六进制ASCII码如\x41也是A我曾用\r实现过进度条效果import time for i in range(101): print(f\r进度: {i}%, end) time.sleep(0.1)3. Python关键字语言的基石Python关键字就像乐高积木的基础零件有固定用途且不能挪作他用。最新Python 3.11有35个关键字3.1 关键字的分类类别关键字示例流程控制if, elif, else, for, while逻辑运算and, or, not, is异常处理try, except, finally, raise定义结构def, class, lambda变量操作del, global, nonlocal3.2 查看关键字的方法import keyword print(keyword.kwlist) # 打印所有关键字 print(keyword.iskeyword(pass)) # 检查是否是关键字踩坑提醒我曾见过有人用str作为变量名虽然它不是关键字但会覆盖内置函数导致后续代码出现诡异bug。4. 标识符命名程序员的面子标识符就是给变量、函数、类等起的名字。好的命名应该像好记的电话号码4.1 命名规则必须遵守可用字符字母、数字、下划线但不能以数字开头区分大小写age和Age是不同变量不能是关键字4.2 命名规范建议遵守变量小写加下划线如user_name常量全大写加下划线如MAX_SIZE类名驼峰式如ClassName私有成员以下划线开头如_private_var# 好例子 student_count 42 PI 3.14159 class UserProfile: pass # 坏例子 3years 3 # 数字开头 user-name Tom # 含连字符真实案例我曾调试一个bug两小时最后发现是有人用l小写L和1数字一做变量名在等宽字体下都分不清。5. 数据类型转换变形金刚Python是动态类型语言但有时需要显式转换类型5.1 常见转换函数函数作用注意事项int(x)转为整数字符串必须全数字float(x)转为浮点数支持科学计数法字符串str(x)转为字符串任何类型都能转bool(x)转为布尔值0、、[]等会转为Falselist(x)转为列表可迭代对象均可5.2 实际应用场景# 用户输入的都是字符串需要转换 age int(input(请输入年龄)) price float(99.99) # 处理混合类型运算 result 10 int(20) # 正确30 # result 10 20 # 报错类型不匹配 # 格式化输出需要字符串 print(价格 str(99.9))类型转换最容易出错的点是浮点转整数——会直接截断小数部分print(int(3.9)) # 输出3不是四舍五入6. 运算符代码的算盘Python运算符就像数学中的加减乘除但功能更丰富6.1 算术运算符# 基本运算 print(10 3) # 13 print(10 - 3) # 7 print(10 * 3) # 30 print(10 / 3) # 3.333... (真除法) print(10 // 3) # 3 (地板除) print(10 % 3) # 1 (取模) print(10 ** 3) # 1000 (幂运算)6.2 比较运算符比较运算符返回布尔值常用于条件判断a, b 5, 3 print(a b) # False print(a ! b) # True print(a b) # True print(a b) # False6.3 逻辑运算符x, y True, False print(x and y) # False (与) print(x or y) # True (或) print(not x) # False (非)6.4 赋值运算符复合赋值运算符能简化代码count 10 count 2 # 等价于 count count 2 count ** 3 # count count的3次方6.5 运算符优先级当表达式包含多种运算符时按以下顺序计算()括号优先**幂运算* / // %乘除 -加减 ! 比较not and or逻辑运算不确定时就用括号——既安全又清晰result (a b) * (c - d) # 明确优先级7. 字符串操作文本的艺术字符串处理是编程中最常见的任务之一Python提供了丰富的字符串操作方法。7.1 字符串格式化三种方式%格式化经典但逐渐淘汰name Alice print(Hello, %s! % name) # 类似C语言format方法Python 2.6print({}今年{}岁.format(name, age))f-stringPython 3.6推荐print(f{name}今年{age}岁) # 最简洁直观7.2 字符串常用方法text Python编程 print(text.strip()) # 去首尾空格 print(text.lower()) # 转小写 print(text.upper()) # 转大写 print(text.startswith(Py)) # 判断开头 print(编程 in text) # 包含检查 print(text.replace(Python, Java)) # 替换7.3 字符串拼接效率小字符串用没问题但大量拼接应该用join# 低效做法每次都创建新字符串 result for s in string_list: result s # 高效做法 result .join(string_list)8. 流程控制代码的方向盘控制程序执行流程是编程的核心技能Python提供了多种控制结构。8.1 条件判断if语句age 18 if age 12: print(儿童) elif age 18: print(青少年) else: print(成人)8.2 循环结构while循环条件循环count 0 while count 5: print(count) count 1for循环遍历循环for i in range(5): # 0到4 print(i) for char in hello: print(char)8.3 循环控制语句break完全退出循环continue跳过本次迭代else循环正常结束时执行非break退出for n in range(2, 10): for x in range(2, n): if n % x 0: print(f{n}等于{x}*{n//x}) break else: # 循环未被break终止 print(f{n}是质数)9. 函数代码的乐高积木函数是可重用的代码块能提高代码的模块化和可维护性。9.1 定义与调用def greet(name): 返回问候语 return fHello, {name}! print(greet(Alice))9.2 参数传递Python参数传递是对象引用传递对于可变和不可变对象表现不同def modify(x, y): x 2 # 不影响外部不可变对象 y.append(4) # 会影响外部可变对象 a 1 # 不可变 b [1,2,3] # 可变 modify(a, b) print(a, b) # 输出: 1 [1, 2, 3, 4]9.3 参数类型位置参数按顺序传递关键字参数指定参数名默认参数定义时指定默认值可变参数*args接收元组**kwargs接收字典def register(name, age18, *hobbies, **details): print(f{name}, {age}岁) print(爱好:, hobbies) print(详细信息:, details) register(Alice, 20, 读书, 编程, city北京, score90)10. 面向对象编程万物皆对象Python是完全面向对象的语言理解OOP是写出优雅代码的关键。10.1 类与对象class Dog: # 类属性所有实例共享 species Canis familiaris def __init__(self, name, age): # 实例属性每个实例独有 self.name name self.age age def bark(self): return f{self.name} says woof! # 创建实例 my_dog Dog(Buddy, 5) print(my_dog.bark())10.2 继承与多态class Bulldog(Dog): # 继承Dog类 def bark(self): # 方法重写 return f{self.name} says woof! (but gruffly) class Dachshund(Dog): def bark(self): return f{self.name} says yap! # 多态示例 dogs [Bulldog(Spike, 3), Dachshund(Wiener, 2)] for dog in dogs: print(dog.bark())10.3 特殊方法通过实现特殊方法双下划线方法可以让自定义类支持Python内置操作class Vector: def __init__(self, x, y): self.x x self.y y def __add__(self, other): # 实现运算 return Vector(self.x other.x, self.y other.y) def __str__(self): # 定义打印格式 return fVector({self.x}, {self.y}) v1 Vector(2, 3) v2 Vector(1, 4) print(v1 v2) # 输出: Vector(3, 7)11. 异常处理代码的保险丝优雅地处理错误是健壮程序的关键特征。11.1 基本语法try: result 10 / 0 except ZeroDivisionError: print(不能除以零) except (TypeError, ValueError) as e: print(f类型或值错误: {e}) except Exception: # 捕获所有异常慎用 print(未知错误) else: print(没发生异常时执行) finally: print(无论是否异常都执行)11.2 自定义异常class MyError(Exception): 自定义异常类 def __init__(self, message): self.message message try: raise MyError(出错了) except MyError as e: print(e.message)12. 文件操作数据的持久化读写文件是程序与外部世界交互的重要方式。12.1 基本文件操作# 写入文件 with open(data.txt, w, encodingutf-8) as f: f.write(Hello\nWorld) # 自动关闭文件 # 读取文件 with open(data.txt, r, encodingutf-8) as f: content f.read() # 读取全部内容 # 或者逐行读取: # for line in f: # print(line.strip())12.2 JSON文件处理import json data {name: Alice, age: 25} # 写入JSON with open(data.json, w) as f: json.dump(data, f) # 读取JSON with open(data.json) as f: loaded json.load(f) print(loaded[name]) # Alice13. 模块与包代码的组织艺术Python的强大之处在于其丰富的模块生态系统。13.1 导入方式# 导入整个模块 import math print(math.sqrt(16)) # 导入特定功能 from random import randint print(randint(1, 10)) # 给模块起别名 import numpy as np13.2 创建自己的模块创建mymodule.py文件def hello(): print(Hello from mymodule!)在其他文件中使用import mymodule mymodule.hello()13.3 包的结构包是包含__init__.py文件的目录组织方式如下mypackage/ __init__.py module1.py module2.py subpackage/ __init__.py module3.py14. 虚拟环境项目的隔离空间虚拟环境可以隔离项目依赖避免包版本冲突。14.1 创建与使用# 创建 python -m venv myenv # 激活 (Windows) myenv\Scripts\activate # 激活 (macOS/Linux) source myenv/bin/activate # 安装包 pip install requests # 退出 deactivate14.2 依赖管理# 生成requirements.txt pip freeze requirements.txt # 从requirements.txt安装 pip install -r requirements.txt15. 代码风格与规范写出符合规范的代码是专业程序员的素养。15.1 PEP 8要点缩进4个空格不用Tab行长每行不超过79字符命名变量lower_case_with_underscores常量ALL_CAPS类名CapitalizedWords运算符两侧加空格导入顺序标准库、第三方库、本地模块15.2 工具辅助使用autopep8自动格式化pip install autopep8 autopep8 --in-place --aggressive --aggressive myfile.py使用pylint检查代码质量pip install pylint pylint myfile.py16. 调试技巧解决问题的艺术调试是程序员的核心技能掌握工具能事半功倍。16.1 print调试法最简单的调试方法但不够高效def complex_func(x): print(f输入值: {x}) # 调试输出 result x * 2 print(f计算结果: {result}) # 调试输出 return result16.2 使用pdbPython内置调试器import pdb def buggy_func(): a 1 pdb.set_trace() # 设置断点 b 2 return a b常用pdb命令n(ext)执行下一行c(ontinue)继续执行到下一个断点l(ist)查看当前代码p(rint)打印变量值q(uit)退出调试16.3 IDE调试功能现代IDE如PyCharm、VSCode提供图形化调试界面支持断点设置单步执行变量监视调用栈查看17. 性能优化让代码飞起来写出高效代码需要理解Python的性能特点。17.1 时间测量import time start time.perf_counter() # 高精度计时器 # 要测试的代码 result sum(range(1000000)) end time.perf_counter() print(f耗时: {end - start:.4f}秒)17.2 常见优化技巧使用列表推导式替代循环# 较慢 squares [] for x in range(10): squares.append(x**2) # 较快 squares [x**2 for x in range(10)]使用生成器处理大数据# 列表会占用大量内存 big_list [x for x in range(1000000)] # 生成器按需产生值节省内存 big_gen (x for x in range(1000000))使用局部变量加速访问import math def compute(values): sqrt math.sqrt # 局部变量访问更快 return [sqrt(x) for x in values]17.3 使用内置函数Python内置函数是用C实现的通常比自己实现的快# 较慢 total 0 for x in my_list: total x # 较快 total sum(my_list)18. 并发编程同时做多件事Python提供了多种并发处理方式各有适用场景。18.1 多线程适合I/O密集型任务import threading import time def task(name): print(f{name}开始) time.sleep(2) # 模拟I/O操作 print(f{name}结束) threads [] for i in range(3): t threading.Thread(targettask, args(f线程{i},)) threads.append(t) t.start() for t in threads: t.join()注意由于GIL全局解释器锁Python多线程不适合CPU密集型任务。18.2 多进程适合CPU密集型任务import multiprocessing def cpu_bound(n): return sum(i*i for i in range(n)) if __name__ __main__: with multiprocessing.Pool() as pool: results pool.map(cpu_bound, [1000000]*4) print(results)18.3 异步IO适合高并发I/O操作Python 3.5import asyncio async def fetch_data(): print(开始获取数据) await asyncio.sleep(2) # 模拟I/O等待 print(数据获取完成) return {data: 123} async def main(): task1 asyncio.create_task(fetch_data()) task2 asyncio.create_task(fetch_data()) await task1 await task2 asyncio.run(main())19. 单元测试代码的安全网编写测试是保证代码质量的重要手段。19.1 使用unittestimport unittest def add(a, b): return a b class TestAdd(unittest.TestCase): def test_add_positive(self): self.assertEqual(add(2, 3), 5) def test_add_negative(self): self.assertEqual(add(-1, -1), -2) def test_add_zero(self): self.assertEqual(add(0, 0), 0) if __name__ __main__: unittest.main()19.2 使用pytest更简洁的测试框架需要安装pip install pytest测试文件test_sample.py:def test_add(): assert add(2, 3) 5 def test_add_negative(): assert add(-1, -1) -2运行测试pytest test_sample.py -v20. 项目结构从脚本到工程小型脚本和大型项目需要不同的组织结构。20.1 典型项目结构my_project/ │ ├── myproject/ # 项目主包 │ ├── __init__.py │ ├── core.py # 核心功能 │ ├── utils.py # 工具函数 │ └── tests/ # 测试代码 │ ├── __init__.py │ ├── test_core.py │ └── test_utils.py │ ├── docs/ # 文档 ├── setup.py # 安装脚本 ├── requirements.txt # 依赖列表 └── README.md # 项目说明20.2 setup.py示例from setuptools import setup, find_packages setup( namemyproject, version0.1, packagesfind_packages(), install_requires[ requests2.0, numpy, ], entry_points{ console_scripts: [ mycmdmyproject.cli:main, ], }, )21. 常用标准库Python的内置武器Python标准库提供了丰富的工具无需安装第三方包即可使用。21.1 os和sys系统交互import os import sys # 文件操作 os.makedirs(dir1/dir2, exist_okTrue) os.rename(old.txt, new.txt) # 路径操作 current_dir os.getcwd() file_path os.path.join(dir, file.txt) # 系统信息 print(sys.platform) # 操作系统 print(sys.version) # Python版本21.2 collections增强的数据结构from collections import defaultdict, Counter # 默认字典 word_counts defaultdict(int) for word in [a, b, a]: word_counts[word] 1 # 计数器 cnt Counter(abracadabra) print(cnt.most_common(3)) # [(a, 5), (b, 2), (r, 2)]21.3 itertools迭代器工具from itertools import permutations, combinations, product # 排列组合 print(list(permutations(ABC, 2))) # AB, AC, BA, BC, CA, CB print(list(combinations(ABC, 2))) # AB, AC, BC print(list(product(AB, 12))) # A1, A2, B1, B222. 第三方库推荐扩展Python能力Python生态有大量优秀的第三方库能极大提高开发效率。22.1 数据处理numpy高性能数值计算pandas数据分析和操作matplotlib数据可视化22.2 Web开发flask轻量级Web框架django全功能Web框架requestsHTTP客户端22.3 机器学习scikit-learn传统机器学习tensorflow/pytorch深度学习opencv计算机视觉22.4 其他实用库tqdm进度条显示loguru简单日志记录rich终端富文本输出23. 设计模式优雅代码的套路设计模式是解决特定问题的经验总结Python中常用的有23.1 单例模式确保一个类只有一个实例class Singleton: _instance None def __new__(cls): if cls._instance is None: cls._instance super().__new__(cls) return cls._instance a Singleton() b Singleton() print(a is b) # True23.2 工厂模式创建对象的接口让子类决定实例化哪个类class Dog: def speak(self): return Woof! class Cat: def speak(self): return Meow! def get_pet(petdog): pets {dog: Dog(), cat: Cat()} return pets[pet] d get_pet(dog) print(d.speak()) # Woof!23.3 装饰器模式动态扩展对象功能def bold(func): def wrapper(): return b func() /b return wrapper def italic(func): def wrapper(): return i func() /i return wrapper bold italic def hello(): return Hello print(hello()) # biHello/i/b24. 代码重构提升代码质量重构是在不改变功能的前提下改进代码结构。24.1 提取函数将重复代码提取为函数# 重构前 print(计算1:, 10*520) print(计算2:, 15*520) # 重构后 def calc(x): return x*5 20 print(计算1:, calc(10)) print(计算2:, calc(15))24.2 简化条件表达式# 重构前 if x 10: result large else: result small # 重构后 result large if x 10 else small24.3 使用多态替代条件判断# 重构前 def make_sound(animal): if animal dog: return Woof elif animal cat: return Meow elif animal duck: return Quack # 重构后 class Animal: def sound(self): pass class Dog(Animal): def sound(self): return Woof class Cat(Animal): def sound(self): return Meow def make_sound(animal): return animal.sound()25. 持续学习Python进阶之路Python生态系统在不断进化持续学习是关键。25.1 学习资源推荐官方文档docs.python.orgPEP索引Python增强提案Real Python优质教程网站Python Weekly技术简报25.2 参与社区PyCon大会全球Python开发者大会GitHub开源项目阅读优秀代码Stack Overflow解决问题和回答问题25.3 实践建议从小项目开始逐步增加复杂度阅读优秀开源代码如requests、flask参与开源项目贡献定期复习基础知识Python就像一把瑞士军刀掌握核心语法只是开始真正的力量在于如何组合使用这些工具解决实际问题。记住写出能运行的代码只是第一步写出优雅、高效、易维护的代码才是专业程序员的追求。