<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Python从入门到精通 on 老张开工了</title>
    <link>/python%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/</link>
    <description>Recent content in Python从入门到精通 on 老张开工了</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sat, 30 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="/python%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>综合实战：构建命令行工具</title>
      <link>/posts/2026/05/cli-project/</link>
      <pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/cli-project/</guid>
      <description>欢迎来到本系列的最后一个项目！经过前面 29 篇文章的学习，你已经掌握了 Python 的方方面面。现在是时候把所有知识串联起来，从零构建一个完整的命令行工具了。&#xA;项目概览：任务管理器 CLI 我们将构建一个&amp;quot;任务管理器&amp;quot;（Task Manager）CLI 工具，它具备以下功能：&#xA;task-cli add &amp;#34;学习 Python 装饰器&amp;#34; --priority high # 添加任务 task-cli list # 列出所有任务 task-cli list --status pending # 按状态筛选 task-cli done 1 # 完成任务 #1 task-cli delete 1 # 删除任务 #1 task-cli show 1 # 查看任务详情 技术栈：纯 Python 标准库 + argparse + dataclasses + JSON 文件持久化。不需要任何第三方依赖。&#xA;第 1 步：项目结构 task-cli/ ├── src/ │ └── task_cli/ │ ├── __init__.py │ ├── __main__.</description>
    </item>
    <item>
      <title>网络请求与 API 调用</title>
      <link>/posts/2026/05/network-requests/</link>
      <pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/network-requests/</guid>
      <description>当今的软件世界是互联的。你的程序需要获取天气数据、调用 ChatGPT API、从 GitHub 拉取仓库信息、向飞书群发送通知……所有这些都离不开网络请求。&#xA;Python 的标准库提供了 urllib.request，但社区几乎都选择更人性化的 requests 库。本章从基础到实战，带你掌握 Python 中的 HTTP 通信。&#xA;HTTP 基础回顾 在你写代码之前，了解 HTTP 的基本概念会很有帮助：&#xA;概念 说明 URL 统一资源定位符，标识资源的位置 HTTP 方法 GET（获取）、POST（创建）、PUT（全量更新）、PATCH（部分更新）、DELETE（删除） 请求头 携带元信息，如认证 Token、内容类型 请求体 POST/PUT 时发送的数据 状态码 200（成功）、201（创建成功）、400（请求错误）、401（未认证）、404（未找到）、500（服务器错误） 响应体 服务器返回的数据，通常为 JSON 格式 urllib.request：内置方案 Python 标准库自带的 HTTP 客户端，无需安装：&#xA;from urllib.request import Request, urlopen from urllib.parse import urlencode import json # GET 请求 response = urlopen(&amp;#34;https://httpbin.org/get&amp;#34;) print(response.status) # 200 print(response.read().decode()) # JSON 格式的响应内容 # POST 请求 data = urlencode({&amp;#34;name&amp;#34;: &amp;#34;Alice&amp;#34;, &amp;#34;age&amp;#34;: 30}).</description>
    </item>
    <item>
      <title>虚拟环境与依赖管理</title>
      <link>/posts/2026/05/virtualenv-dependencies/</link>
      <pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/virtualenv-dependencies/</guid>
      <description>想象一下：你在项目 A 里用 Django 4.2，项目 B 因为遗留代码只能用 Django 3.2。如果全局只装一个版本的 Django，你只能在两个项目之间反复卸载重装——这简直是噩梦。&#xA;虚拟环境（Virtual Environment）就是来解决这个问题的：它为每个项目创建独立的 Python 环境，每个环境有自己的一套包，互不干扰。&#xA;为什么需要虚拟环境？ 依赖冲突问题 没有虚拟环境时，你的全局 Python 环境是这样的：&#xA;# 全局安装的包（所有项目共享） pip list # Django 4.2 # requests 2.31 # numpy 1.26 这对不同项目的需求造成了冲突：&#xA;项目 需要的版本 问题 项目 A Django 4.2 ✅ 项目 B Django 3.2 ❌ 全局装了 4.2 项目 C requests 2.20 ❌ 全局装了 2.31 虚拟环境的解决方案 系统 Python ├── 虚拟环境 A → Django 4.2, requests 2.31 ├── 虚拟环境 B → Django 3.</description>
    </item>
    <item>
      <title>测试入门：unittest 与 pytest</title>
      <link>/posts/2026/05/testing/</link>
      <pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/testing/</guid>
      <description>当项目从几十行代码膨胀到几千行时，你会面临一个残酷的现实：改了一处逻辑，不知道哪里会碎。手动测试一遍所有功能越来越耗时，而且人总会漏掉东西。这就是自动化测试登场的地方——用代码来验证代码。&#xA;Python 的标准库内置了 unittest 模块，社区则更青睐简洁的 pytest。本章从零开始，带你建立测试思维，掌握两种测试框架，最终写出可维护的测试。&#xA;为什么需要测试？ 没有测试的项目就像走在钢丝上：&#xA;# 假设这是你的核心函数 def calculate_discount(price: float, member_level: str) -&amp;gt; float: &amp;#34;&amp;#34;&amp;#34;根据会员等级计算折扣价&amp;#34;&amp;#34;&amp;#34; discounts = {&amp;#34;normal&amp;#34;: 0.95, &amp;#34;silver&amp;#34;: 0.9, &amp;#34;gold&amp;#34;: 0.8} return price * discounts.get(member_level, 1.0) # 改了一行代码——有人把 silver 的折扣改成了 0.85 # 没有测试的话，你可能永远不会发现这个&amp;#34;优化&amp;#34;改变了行为 测试带来的好处：&#xA;好处 说明 回归防护 修改代码后立即知道是否有东西被破坏 活的文档 测试代码展示了函数在各种情况下的预期行为 设计反馈 如果函数很难写测试，通常意味着它的设计需要改进 信心 重构时不怕改出问题，测试网络会兜住你 unittest：标准库自带 unittest 是 Python 标准库的一部分，灵感来自 Java 的 JUnit。不需要额外安装，开箱即用。&#xA;基本结构 import unittest # 被测函数 def add(a, b): return a + b class TestMathOperations(unittest.</description>
    </item>
    <item>
      <title>异步编程与 asyncio</title>
      <link>/posts/2026/05/asyncio/</link>
      <pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/asyncio/</guid>
      <description>异步编程概述 asyncio 是 Python 用于编写并发代码的标准库，使用 async/await 语法。它是处理 I/O 密集型高并发任务的最佳方案——比如 Web 服务器、爬虫、API 调用等。&#xA;与多线程不同，asyncio 在单线程内实现并发，没有线程切换开销和竞态条件问题。与多进程不同，asyncio 可以轻松处理数万个并发连接。&#xA;核心概念 协程（Coroutine） 协程是可以暂停执行和恢复执行的函数，是 async/await 的基础：&#xA;import asyncio # 定义协程函数 async def say_hello(): print(&amp;#34;你好&amp;#34;) await asyncio.sleep(1) # 模拟 I/O 等待 print(&amp;#34;世界&amp;#34;) # 调用协程函数返回协程对象，不会执行 coro = say_hello() print(type(coro)) # &amp;lt;class &amp;#39;coroutine&amp;#39;&amp;gt; # 运行协程 asyncio.run(say_hello()) 关键区别：&#xA;普通函数调用：func() → 立即执行并返回结果 协程函数调用：async_func() → 返回协程对象，需要 await 或 asyncio.run await 关键字 await 用于等待一个 awaitable 对象（协程、Task、Future）完成：&#xA;import asyncio async def fetch_data(): print(&amp;#34;开始获取数据...&amp;#34;) await asyncio.</description>
    </item>
    <item>
      <title>并发编程：多线程与多进程</title>
      <link>/posts/2026/05/concurrency/</link>
      <pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/concurrency/</guid>
      <description>并发编程概述 并发编程是提升程序性能的关键手段。Python 提供了三种主要的并发模型：&#xA;多线程（threading）：适用于 I/O 密集型任务 多进程（multiprocessing）：适用于 CPU 密集型任务 异步（asyncio）：适用于高并发 I/O 任务（下一章详解） 选择合适的并发模型至关重要——选错了不仅不会提升性能，反而可能让程序更慢。&#xA;理解并发与并行 # 并发：多个任务交替执行（看起来像同时） # 并行：多个任务真正同时执行（多核 CPU） # 类比： # - 并发 = 一个人交替做三件事 # - 并行 = 三个人各做一件事 线程 vs 进程 特性 线程 (Thread) 进程 (Process) 内存共享 共享同一进程内存 独立内存空间 创建开销 较低 较高 通信方式 直接访问共享变量 Queue/Pipe/共享内存 适合场景 I/O 密集型 CPU 密集型 GIL 影响 受 GIL 限制 不受 GIL 限制 安全性 需要锁来保护共享数据 天然隔离 GIL 详解 GIL（Global Interpreter Lock，全局解释器锁）是 Python 中最重要的并发概念：</description>
    </item>
    <item>
      <title>常用标准库精讲</title>
      <link>/posts/2026/05/standard-library/</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/standard-library/</guid>
      <description>Python 标准库的威力 Python 常被称为&amp;quot;自带电池&amp;quot;（Batteries Included）的语言，因为它的标准库涵盖了从数据结构到文件处理、从网络编程到数据序列化的方方面面。熟练掌握标准库可以让你在绝大多数场景下无需安装任何第三方包就能高效完成任务。&#xA;本章将精选最常用的标准库模块进行深入讲解。&#xA;collections：扩展数据结构 collections 模块提供了 Python 内置数据类型的升级版，在日常编码中使用频率极高。&#xA;defaultdict：带默认值的字典 from collections import defaultdict # 普通字典访问不存在的 key 会报 KeyError # defaultdict 自动为不存在的 key 创建默认值 # 统计字符出现次数 text = &amp;#34;hello world&amp;#34; counter = defaultdict(int) for char in text: counter[char] += 1 print(counter) # defaultdict(&amp;lt;class &amp;#39;int&amp;#39;&amp;gt;, {&amp;#39;h&amp;#39;: 1, &amp;#39;e&amp;#39;: 1, &amp;#39;l&amp;#39;: 3, &amp;#39;o&amp;#39;: 2, &amp;#39; &amp;#39;: 1, &amp;#39;w&amp;#39;: 1, &amp;#39;r&amp;#39;: 1, &amp;#39;d&amp;#39;: 1}) # 用列表作为默认值（分组） students = [ (&amp;#34;A班&amp;#34;, &amp;#34;小明&amp;#34;), (&amp;#34;B班&amp;#34;, &amp;#34;小红&amp;#34;), (&amp;#34;A班&amp;#34;, &amp;#34;小刚&amp;#34;), (&amp;#34;B班&amp;#34;, &amp;#34;小丽&amp;#34;), ] classes = defaultdict(list) for class_name, student in students: classes[class_name].</description>
    </item>
    <item>
      <title>日期与时间处理</title>
      <link>/posts/2026/05/datetime/</link>
      <pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/datetime/</guid>
      <description>Python 中的日期和时间 日期和时间处理是编程中常见的需求——日志记录、数据统计、任务调度、业务逻辑计算，几乎每个项目都离不开它。Python 提供了多个内置模块来处理日期和时间，其中 datetime 是最核心、最常用的模块。&#xA;datetime 模块核心类 datetime 模块包含以下几个核心类：&#xA;类 说明 示例 date 日期（年、月、日） date(2026, 5, 21) time 时间（时、分、秒、微秒） time(14, 30, 0) datetime 日期+时间 datetime(2026, 5, 21, 14, 30) timedelta 时间差 timedelta(days=7) timezone 时区 timezone(timedelta(hours=8)) 创建日期和时间对象 from datetime import date, time, datetime, timedelta # 创建日期 d = date(2026, 5, 21) print(d) # 2026-05-21 print(d.year) # 2026 print(d.month) # 5 print(d.day) # 21 # 创建时间 t = time(14, 30, 15, 500000) print(t) # 14:30:15.</description>
    </item>
    <item>
      <title>正则表达式从入门到精通</title>
      <link>/posts/2026/05/regex/</link>
      <pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/regex/</guid>
      <description>什么是正则表达式 正则表达式（Regular Expression，简称 regex）是一种用于匹配字符串中字符组合的模式。它提供了一种强大、灵活且高效的方式来处理文本——搜索、匹配、替换和提取数据。&#xA;Python 的 re 模块提供了完整的正则表达式支持。在本章中，我们将从基础语法开始，逐步深入到实战应用。&#xA;第一个正则表达式 import re # 检查字符串中是否包含 &amp;#34;python&amp;#34; text = &amp;#34;我喜欢 Python 编程语言&amp;#34; pattern = r&amp;#34;Python&amp;#34; result = re.search(pattern, text) if result: print(f&amp;#34;找到了: {result.group()}&amp;#34;) # 输出: 找到了: Python 这里的 r&amp;quot;Python&amp;quot; 中的 r 表示原始字符串（raw string），它会告诉 Python 不要处理字符串中的反斜杠转义，这对于正则表达式至关重要。&#xA;re 模块的核心函数 re.match() — 从开头匹配 re.match() 从字符串的起始位置开始匹配，如果开头不匹配则返回 None：&#xA;import re text = &amp;#34;Python 是一门优秀的编程语言&amp;#34; # 从开头匹配 match = re.match(r&amp;#34;Python&amp;#34;, text) if match: print(match.group()) # Python # 不从开头匹配则失败 match = re.</description>
    </item>
    <item>
      <title>装饰器深入与实践</title>
      <link>/posts/2026/05/decorators/</link>
      <pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/decorators/</guid>
      <description>认识装饰器 装饰器（Decorator）是 Python 中一种强大的元编程工具。简单来说，装饰器就是一个函数，它接受另一个函数作为参数，并返回一个新的函数。装饰器允许我们在不修改原函数源代码的情况下，给函数添加额外的功能。&#xA;函数是一等公民 要理解装饰器，先要理解 Python 中&amp;quot;函数是一等公民&amp;quot;这个概念：&#xA;# 函数可以赋值给变量 def greet(name): return f&amp;#34;你好, {name}!&amp;#34; say_hello = greet print(say_hello(&amp;#34;小明&amp;#34;)) # 输出: 你好, 小明! # 函数可以作为参数传递 def call_twice(func, arg): return func(arg), func(arg) result1, result2 = call_twice(greet, &amp;#34;小红&amp;#34;) print(result1) # 输出: 你好, 小红! # 函数可以嵌套定义 def outer(): def inner(): return &amp;#34;我是内部函数&amp;#34; return inner inner_func = outer() print(inner_func()) # 输出: 我是内部函数 最简单的装饰器 基于上述特性，我们可以写出最简单的装饰器：&#xA;def my_decorator(func): def wrapper(): print(&amp;#34;函数调用前执行&amp;#34;) func() print(&amp;#34;函数调用后执行&amp;#34;) return wrapper def say_hello(): print(&amp;#34;你好!</description>
    </item>
    <item>
      <title>迭代器与生成器</title>
      <link>/posts/2026/05/iterators-generators/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/iterators-generators/</guid>
      <description>迭代（Iteration）是编程中最基础也最重要的操作之一。Python 通过迭代器协议和生成器提供了强大而优雅的迭代机制。理解迭代器和生成器，不仅能让你写出更高效的代码，还能掌握处理大数据集和无限序列的能力。&#xA;迭代基础 可迭代对象 vs 迭代器 理解这两个概念是掌握 Python 迭代的基础：&#xA;from typing import Iterable, Iterator # 可迭代对象（Iterable）：可以用于 for 循环的对象 # 实现了 __iter__() 方法，返回一个迭代器 # 迭代器（Iterator）：负责产生数据的对象 # 实现了 __iter__() 和 __next__() 方法 # 常见可迭代对象 print(isinstance([], Iterable)) # True print(isinstance({}, Iterable)) # True print(isinstance(&amp;#34;hello&amp;#34;, Iterable)) # True print(isinstance(range(10), Iterable)) # True # 列表是可迭代对象，但不是迭代器 print(isinstance([], Iterator)) # False for 循环内部原理 # Python 的 for 循环等价于以下过程： # 你写的代码 for item in [1, 2, 3]: print(item) # Python 实际执行的代码 _iter = iter([1, 2, 3]) # 获取迭代器 while True: try: item = next(_iter) # 获取下一个值 print(item) except StopIteration: # 没有更多元素 break 理解这个机制很重要——它解释了为什么迭代器是惰性的（按需生成数据）以及为什么可迭代对象可以用于 for 循环。</description>
    </item>
    <item>
      <title>上下文管理器与 with 语句</title>
      <link>/posts/2026/05/context-managers/</link>
      <pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/context-managers/</guid>
      <description>上下文管理器（Context Manager）是 Python 中用于资源管理的核心机制。无论你是在读写文件、获取锁、打开数据库连接还是管理网络会话——with 语句都能确保资源被正确释放，即使发生异常也不例外。&#xA;为什么需要上下文管理器 传统方式的痛点 来看一个常见的文件操作：&#xA;# 传统方式：容易忘记关闭文件 f = open(&amp;#34;data.txt&amp;#34;, &amp;#34;r&amp;#34;) content = f.read() f.close() # 如果前面的代码抛异常，这一行不会执行！ # 改进：用 try/finally 确保关闭 f = open(&amp;#34;data.txt&amp;#34;, &amp;#34;r&amp;#34;) try: content = f.read() finally: f.close() # 无论是否异常，都会执行 虽然 try/finally 能解决问题，但代码显得冗长。如果每次资源操作都要写 try/finally，不仅繁琐而且容易遗漏。&#xA;使用 with 语句 # with 语句 —— 简洁且安全 with open(&amp;#34;data.txt&amp;#34;, &amp;#34;r&amp;#34;) as f: content = f.read() # 离开 with 块后，文件自动关闭 # 等价于 try/finally，但更简洁 with 语句的工作原理 with 语句的本质是执行上下文管理器的协议：&#xA;with EXPRESSION as VARIABLE: BLOCK 等价于：</description>
    </item>
    <item>
      <title>属性装饰器与 property</title>
      <link>/posts/2026/05/properties-descriptors/</link>
      <pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/properties-descriptors/</guid>
      <description>在 Python 中，属性访问是最常见的操作之一。但简单的属性赋值往往不够——你可能需要校验、计算或延迟加载。@property 装饰器和描述符协议提供了优雅的解决方案，让你能在不破坏外部接口的前提下控制属性行为。&#xA;@property 装饰器 从 getter/setter 到 property 我们先看一个传统 getter/setter 的写法：&#xA;class Person: def __init__(self, name: str, age: int): self._name = name self._age = age def get_name(self) -&amp;gt; str: return self._name def set_name(self, value: str) -&amp;gt; None: if not value.strip(): raise ValueError(&amp;#34;Name cannot be empty&amp;#34;) self._name = value p = Person(&amp;#34;Alice&amp;#34;, 30) print(p.get_name()) p.set_name(&amp;#34;Bob&amp;#34;) 这种 Java 风格在 Python 中并不推荐。@property 提供了更 Pythonic 的方式：&#xA;class Person: def __init__(self, name: str, age: int): self.</description>
    </item>
    <item>
      <title>魔法方法与运算符重载</title>
      <link>/posts/2026/05/magic-methods/</link>
      <pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/magic-methods/</guid>
      <description>魔法方法（Magic Methods）是 Python 中以双下划线开头和结尾的特殊方法，它们让自定义对象能够与 Python 的内置操作无缝集成。通过实现魔法方法，你可以让自己的类支持 +、[]、len()、for...in 等语法，让代码更加自然和 Pythonic。&#xA;魔法方法概述 魔法方法也被称为 dunder 方法（double underscore 的缩写）。它们不需要手动调用——Python 在特定操作时会自动触发。&#xA;class Demo: def __init__(self, value): self.value = value def __str__(self): return f&amp;#34;Demo({self.value})&amp;#34; def __len__(self): return len(str(self.value)) d = Demo(42) print(str(d)) # 触发 __str__ print(len(d)) # 触发 __len__ 对象的生命周期管理 __new__：真正的构造函数 __new__ 在 __init__ 之前调用，负责创建并返回实例。它通常只在需要控制对象创建时才会被重写：&#xA;class Singleton: &amp;#34;&amp;#34;&amp;#34;单例模式：全局只有一个实例&amp;#34;&amp;#34;&amp;#34; _instance = None def __new__(cls, *args, **kwargs): if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance def __init__(self, value: int): # 注意：每次调用 Singleton() 都会执行 __init__ self.</description>
    </item>
    <item>
      <title>继承与多态</title>
      <link>/posts/2026/05/inheritance-polymorphism/</link>
      <pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/inheritance-polymorphism/</guid>
      <description>继承和多态是面向对象编程的核心特性。继承让代码复用成为可能，多态则让代码更加灵活和可扩展。本篇将深入探讨 Python 中的继承机制、多态的实现方式，以及常见的模式与最佳实践。&#xA;继承基础 继承允许一个类（子类）获取另一个类（父类）的属性和方法，从而实现代码复用。&#xA;class Animal: def __init__(self, name: str): self.name = name def eat(self) -&amp;gt; str: return f&amp;#34;{self.name} is eating&amp;#34; def sleep(self) -&amp;gt; str: return f&amp;#34;{self.name} is sleeping&amp;#34; class Dog(Animal): def bark(self) -&amp;gt; str: return f&amp;#34;{self.name} says Woof!&amp;#34; class Cat(Animal): def meow(self) -&amp;gt; str: return f&amp;#34;{self.name} says Meow!&amp;#34; dog = Dog(&amp;#34;Buddy&amp;#34;) cat = Cat(&amp;#34;Kitty&amp;#34;) # 继承的方法 print(dog.eat()) # Buddy is eating print(cat.sleep()) # Kitty is sleeping # 子类特有的方法 print(dog.</description>
    </item>
    <item>
      <title>类与对象基础</title>
      <link>/posts/2026/05/classes-objects/</link>
      <pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/classes-objects/</guid>
      <description>面向对象编程（Object-Oriented Programming，OOP）是现代编程中最重要的编程范式之一。Python 从设计之初就是一门面向对象的语言——在 Python 中，一切皆对象。本篇将从最基础的概念开始，带你彻底掌握 Python 中的类与对象。&#xA;面向对象编程概述 面向对象编程的核心思想是：将数据和操作数据的方法封装在一起，形成&amp;quot;对象&amp;quot;。与面向过程编程（以函数为中心）不同，OOP 以&amp;quot;类&amp;quot;和&amp;quot;对象&amp;quot;为中心。&#xA;四大基本特性 封装（Encapsulation）：将数据和内部实现细节隐藏，对外只暴露必要的接口 继承（Inheritance）：子类可以复用父类的属性和方法 多态（Polymorphism）：同一接口在不同对象上表现不同行为 抽象（Abstraction）：隐藏复杂实现，只暴露简化接口 类的定义与实例化 最简单的类 class Dog: &amp;#34;&amp;#34;&amp;#34;一个简单的 Dog 类&amp;#34;&amp;#34;&amp;#34; pass # 实例化对象 my_dog = Dog() print(type(my_dog)) # &amp;lt;class &amp;#39;__main__.Dog&amp;#39;&amp;gt; print(isinstance(my_dog, Dog)) # True class 关键字用于定义一个类。类名通常使用 PascalCase 命名规范。pass 表示空语句块，用来占位。&#xA;构造函数 __init__ __init__ 是一个特殊方法（魔法方法），在创建对象时自动调用，用于初始化实例属性：&#xA;class Dog: def __init__(self, name: str, age: int): self.name = name # 实例属性 self.age = age # 实例属性 def bark(self) -&amp;gt; str: return f&amp;#34;{self.name} says: Woof!</description>
    </item>
    <item>
      <title>异常处理与调试</title>
      <link>/posts/2026/05/exceptions-debugging/</link>
      <pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/exceptions-debugging/</guid>
      <description>程序总会有出错的时候——用户输入了无效数据、网络连接中断、磁盘空间不足……优秀的程序员不是写出永不报错的代码（这是不可能的），而是能优雅地处理错误，让程序在异常情况下也能行为可预测、可排查。&#xA;本章将系统学习 Python 的异常处理机制——从 try/except 到自定义异常，再到使用 pdb 和 logging 进行调试，让你的代码从&amp;quot;动不动就崩溃&amp;quot;变成&amp;quot;稳如磐石&amp;quot;。&#xA;Python 的异常哲学 Python 推崇 EAFP 原则——&amp;ldquo;Easier to Ask for Forgiveness than Permission&amp;rdquo;（请求原谅比获得许可更容易）。也就是：先尝试执行，如果出错了再处理，而不是在动手之前做各种检查。&#xA;# LBYL 风格（Look Before You Leap）——非 Python 方式 def safe_divide_lbyl(a, b): if b == 0: return None if not isinstance(a, (int, float)): return None return a / b # EAFP 风格——Python 方式 def safe_divide_eafp(a, b): try: return a / b except (ZeroDivisionError, TypeError): return None try/except/else/finally Python 的异常处理结构由四个子句组成：</description>
    </item>
    <item>
      <title>文件读写与 IO 操作</title>
      <link>/posts/2026/05/file-io/</link>
      <pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/file-io/</guid>
      <description>文件操作是编程中最常见的任务之一——读取配置文件、写入日志、处理数据文件、导入导出……几乎每个程序都需要和文件打交道。&#xA;Python 的文件操作接口设计得既简洁又强大。本章将从基础的 open() 函数开始，逐步深入到上下文管理器、CSV 处理、JSON 读写、现代路径操作以及临时文件的处理。&#xA;open() 函数 open() 是 Python 文件操作的入口，返回一个文件对象（file object）：&#xA;# 打开文件读取 file = open(&amp;#34;example.txt&amp;#34;, &amp;#34;r&amp;#34;, encoding=&amp;#34;utf-8&amp;#34;) content = file.read() file.close() # 务必关闭！ print(content) 文件模式 open() 的第二个参数是模式（mode），决定了你要对文件做什么操作：&#xA;模式 含义 文件指针位置 &amp;quot;r&amp;quot; 读取（默认） 开头 &amp;quot;w&amp;quot; 写入（覆盖已有内容） 开头（清空文件） &amp;quot;a&amp;quot; 追加 末尾 &amp;quot;x&amp;quot; 排他创建（文件已存在则报错） 开头 &amp;quot;r+&amp;quot; 读写 开头 &amp;quot;w+&amp;quot; 读写（覆盖） 开头（清空文件） &amp;quot;a+&amp;quot; 读写（追加） 末尾 加上类型修饰符：&#xA;修饰符 含义 &amp;quot;b&amp;quot; 二进制模式（如 &amp;quot;rb&amp;quot;、&amp;quot;wb&amp;quot;） &amp;quot;t&amp;quot; 文本模式（默认，如 &amp;quot;rt&amp;quot; 等价于 &amp;quot;r&amp;quot;） # 各种模式的示例 # 读取文本文件 with open(&amp;#34;data.</description>
    </item>
    <item>
      <title>模块与包管理</title>
      <link>/posts/2026/05/modules-packages/</link>
      <pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/modules-packages/</guid>
      <description>到目前为止，我们所有的代码都写在了一个文件中。当程序变得庞大时，把所有代码塞在一个文件里会让维护变得痛苦不堪。&#xA;Python 通过**模块（Module）和包（Package）**来解决这个问题。模块就是 .py 文件，包就是包含模块的目录。借助这套机制，你可以把代码拆分成逻辑单元，复用第三方库，并组织自己的项目结构。&#xA;模块的概念 一个 .py 文件就是一个模块。模块名就是文件名（去掉 .py）。&#xA;# 文件：greeting.py &amp;#34;&amp;#34;&amp;#34;问候模块&amp;#34;&amp;#34;&amp;#34; def say_hello(name): return f&amp;#34;Hello, {name}!&amp;#34; def say_goodbye(name): return f&amp;#34;Goodbye, {name}!&amp;#34; PI = 3.14159 # 模块中也可以定义变量 print(f&amp;#34;模块 {__name__} 已加载&amp;#34;) # 每个模块都有 __name__ 在其他文件中导入它：&#xA;# 文件：main.py import greeting # 导入 greeting 模块 print(greeting.say_hello(&amp;#34;Alice&amp;#34;)) # Hello, Alice! print(greeting.PI) # 3.14159 import 的各种方式 基本导入 # 方式 1：导入整个模块 import math print(math.sqrt(16)) # 4.0 # 方式 2：导入特定对象 from math import sqrt, pi print(sqrt(25)) # 5.</description>
    </item>
    <item>
      <title>高阶函数与 Lambda 表达式</title>
      <link>/posts/2026/05/higher-order-functions/</link>
      <pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/higher-order-functions/</guid>
      <description>在上一章我们学到，Python 的函数是一等公民——可以作为参数传递、作为返回值返回。在这个基础上，**高阶函数（Higher-Order Function）**就是把函数当成普通值来操作的函数：要么接收函数作为参数，要么返回一个函数，或者两者兼备。&#xA;本章我们将学习 Python 中常见的高阶函数模式，包括 map、filter、reduce、sorted 的 key 函数、Lambda 表达式、偏函数，以及函数组合的技巧。&#xA;函数作为参数 这是最直观的高阶函数形式——一个函数接收另一个函数作为参数：&#xA;def apply_twice(func, value): &amp;#34;&amp;#34;&amp;#34;对 value 应用两次 func&amp;#34;&amp;#34;&amp;#34; return func(func(value)) def add_one(x): return x + 1 print(apply_twice(add_one, 5)) # 7（5→6→7） def square(x): return x ** 2 print(apply_twice(square, 2)) # 16（2→4→16） 这种模式在 Python 标准库中无处不在。比如 sorted() 的 key 参数：&#xA;words = [&amp;#34;python&amp;#34;, &amp;#34;Java&amp;#34;, &amp;#34;C&amp;#34;, &amp;#34;javascript&amp;#34;, &amp;#34;Go&amp;#34;] # 按照字符串长度排序 sorted_by_len = sorted(words, key=len) print(sorted_by_len) # [&amp;#39;C&amp;#39;, &amp;#39;Go&amp;#39;, &amp;#39;Java&amp;#39;, &amp;#39;python&amp;#39;, &amp;#39;javascript&amp;#39;] # 自定义排序逻辑 sorted_by_last_char = sorted(words, key=lambda s: s[-1]) print(sorted_by_last_char) # [&amp;#39;Java&amp;#39;, &amp;#39;C&amp;#39;, &amp;#39;python&amp;#39;, &amp;#39;Go&amp;#39;, &amp;#39;javascript&amp;#39;] Lambda 表达式 Lambda 表达式是创建匿名函数的快捷方式。当需要一个简单的、只使用一次的函数时，可以用 lambda 替代完整的 def 定义：</description>
    </item>
    <item>
      <title>作用域、闭包与命名空间</title>
      <link>/posts/2026/05/scope-closure/</link>
      <pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/scope-closure/</guid>
      <description>上一章我们学会了写函数。但你有没有想过：函数里面定义的变量为什么外面访问不到？为什么嵌套函数能&amp;quot;记住&amp;quot;外层函数的变量？这些问题的答案都藏在 Python 的作用域（Scope）和闭包（Closure）机制里。&#xA;理解作用域和闭包，是写出高质量 Python 代码的关键一步——它们决定了变量在哪里可见、函数的生命周期如何运作、以及如何优雅地实现状态保持。&#xA;命名空间（Namespace） 命名空间是&amp;quot;名字到对象&amp;quot;的映射。当你写 x = 1，Python 就把名字 x 和对象 1 关联起来，这个关联关系就存在于当前命名空间中。&#xA;Python 的命名空间分为几种：&#xA;# 内置命名空间 —— print, len, int 等内置函数 # 全局命名空间 —— 模块级别的名字 # 局部命名空间 —— 函数内的名字 不同命名空间是独立隔离的——同一个名字在不同空间中可以指向不同的对象。&#xA;LEGB 规则 Python 在查找变量时，按照 LEGB 顺序搜索四个作用域：&#xA;Local —— 当前函数内部的局部作用域 Enclosing —— 外层函数的局部作用域（嵌套函数中） Global —— 模块的全局作用域 Built-in —— Python 内置作用域（print、len 等） # Built-in 示例 —— 可以直接用内置函数 print(len(&amp;#34;hello&amp;#34;)) # len 在 Built-in 作用域 # Global 示例 —— 模块级别的变量 x = &amp;#34;全局变量&amp;#34; def outer(): # Enclosing —— 外围函数作用域 y = &amp;#34;外层变量&amp;#34; def inner(): # Local —— 局部作用域 z = &amp;#34;内层变量&amp;#34; # LEGB 查找顺序：先找 z（Local），再找 y（Enclosing），再找 x（Global），最后找内置 print(z) # Local print(y) # Enclosing print(x) # Global inner() outer() 图解 LEGB # 全局作用域（Global） g = 100 def outer_func(): # 外围作用域（Enclosing） e = 200 def inner_func(): # 局部作用域（Local） l = 300 # 查找顺序： print(l) # 1.</description>
    </item>
    <item>
      <title>函数定义与参数传递</title>
      <link>/posts/2026/05/functions/</link>
      <pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/functions/</guid>
      <description>函数是组织代码的基本单元。它让你把一段逻辑封装起来，给它一个名字，然后在需要的地方反复调用。Python 的函数设计灵活而强大——从最简单的位置参数到复杂的 *args、**kwargs，从类型注解到嵌套函数，掌握函数就等于掌握了代码复用的钥匙。&#xA;def 语句与函数定义 Python 使用 def 关键字定义函数，基本语法如下：&#xA;def greet(name): &amp;#34;&amp;#34;&amp;#34;向指定的人打招呼&amp;#34;&amp;#34;&amp;#34; return f&amp;#34;Hello, {name}!&amp;#34; print(greet(&amp;#34;Alice&amp;#34;)) # Hello, Alice! 函数的组成部分：&#xA;部分 说明 def 关键字 声明这是一个函数 函数名 greet 遵循变量命名规则，建议用蛇形命名法 参数列表 (name) 输入，可以为空 () 冒号 : 标志函数头结束 函数体（缩进块） 实际执行的代码 return 语句 返回值，没有 return 则返回 None 函数定义只是创建了一个可调用对象，函数体在调用之前不会执行：&#xA;def lazy(): print(&amp;#34;这行代码被推迟执行了！&amp;#34;) print(&amp;#34;函数已定义，但尚未执行&amp;#34;) # 先执行 lazy() # 现在才执行函数体 参数 vs 参数 初学者经常混淆这两个概念：&#xA;参数（Parameter）：函数定义时写在括号里的变量名，是&amp;quot;形参&amp;quot; 参数（Argument）：调用函数时传入的具体值，是&amp;quot;实参&amp;quot; def add(x, y): # x 和 y 是参数（Parameter） return x + y result = add(3, 5) # 3 和 5 是参数（Argument） 用中文记忆：&amp;ldquo;参数&amp;quot;是定义时的占位符，&amp;ldquo;参数&amp;quot;是调用时塞进去的值。</description>
    </item>
    <item>
      <title>循环结构与迭代</title>
      <link>/posts/2026/05/loops/</link>
      <pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/loops/</guid>
      <description>条件判断让程序有了决策能力，而循环让程序能够重复执行代码块。循环是编程中最强大的工具之一——它让我们能用几行代码处理成千上万的数据。&#xA;Python 提供两种主要的循环结构：for 循环（用于遍历可迭代对象）和 while 循环（用于条件控制）。&#xA;for 循环 for 循环用于遍历可迭代对象（如列表、元组、字符串、字典、集合等）。&#xA;基本语法 # for 循环的基本结构 fruits = [&amp;#34;苹果&amp;#34;, &amp;#34;香蕉&amp;#34;, &amp;#34;橙子&amp;#34;] for fruit in fruits: print(f&amp;#34;我喜欢吃{fruit}&amp;#34;) # 输出： # 我喜欢吃苹果 # 我喜欢吃香蕉 # 我喜欢吃橙子 遍历不同类型的序列 # 遍历字符串 for char in &amp;#34;Python&amp;#34;: print(char, end=&amp;#34; &amp;#34;) print() # P y t h o n # 遍历元组 for color in (&amp;#34;red&amp;#34;, &amp;#34;green&amp;#34;, &amp;#34;blue&amp;#34;): print(color, end=&amp;#34; &amp;#34;) print() # red green blue # 遍历集合（顺序不确定） for num in {3, 1, 4, 1, 5, 9}: print(num, end=&amp;#34; &amp;#34;) print() # 1 3 4 5 9（自动去重，顺序可能不同） # 遍历字典（默认遍历键） student = {&amp;#34;name&amp;#34;: &amp;#34;张三&amp;#34;, &amp;#34;age&amp;#34;: 20, &amp;#34;score&amp;#34;: 85} for key in student: print(key, end=&amp;#34; &amp;#34;) print() # name age score # 遍历字典的键值对 for key, value in student.</description>
    </item>
    <item>
      <title>条件判断与分支控制</title>
      <link>/posts/2026/05/conditionals/</link>
      <pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/conditionals/</guid>
      <description>到目前为止，我们学习的程序都是按顺序从上到下逐行执行的。但在实际编程中，我们需要程序能够根据不同的条件做出不同的决策——这就要用到条件判断。条件判断是程序控制流的三大结构之一（顺序、分支、循环）。&#xA;if/elif/else 基本结构 Python 使用 if、elif、else 关键字来实现分支控制，最特别的是用缩进而不是花括号来划定代码块。&#xA;基本语法 # if 语句的基本结构 age = 18 if age &amp;gt;= 18: print(&amp;#34;你已成年&amp;#34;) print(&amp;#34;可以考驾照了&amp;#34;) print(&amp;#34;程序结束&amp;#34;) # 输出： # 你已成年 # 可以考驾照了 # 程序结束 if/else 二选一 # if/else 结构 age = 16 if age &amp;gt;= 18: print(&amp;#34;允许进入&amp;#34;) else: print(&amp;#34;禁止进入&amp;#34;) # 输出：禁止进入 if/elif/else 多选一 # 多条件分支 score = 85 if score &amp;gt;= 90: grade = &amp;#34;优秀&amp;#34; elif score &amp;gt;= 80: grade = &amp;#34;良好&amp;#34; elif score &amp;gt;= 70: grade = &amp;#34;中等&amp;#34; elif score &amp;gt;= 60: grade = &amp;#34;及格&amp;#34; else: grade = &amp;#34;不及格&amp;#34; print(f&amp;#34;成绩等级: {grade}&amp;#34;) # 成绩等级: 良好 # 注意：只会执行第一个满足条件的分支 score = 95 if score &amp;gt;= 90: print(&amp;#34;优秀&amp;#34;) # 只执行这个 elif score &amp;gt;= 80: print(&amp;#34;良好&amp;#34;) # 不会执行 elif score &amp;gt;= 60: print(&amp;#34;及格&amp;#34;) # 不会执行 Python 条件判断的特点 # 1.</description>
    </item>
    <item>
      <title>字典与集合</title>
      <link>/posts/2026/05/dict-set/</link>
      <pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/dict-set/</guid>
      <description>上一篇文章我们学习了列表和元组这两种有序的序列类型。今天我们要学习的字典和集合则是以哈希表为基础的另一类数据结构，它们的特点是无序、高效，在实际编程中有着极其广泛的应用。&#xA;字典（Dict） 字典是一种键值对映射结构，通过键来快速查找对应的值。你可以把它想象成一本真正的字典——通过&amp;quot;词条&amp;quot;（键）来查找&amp;quot;释义&amp;quot;（值）。&#xA;创建字典 # 多种创建字典的方式 # 方式1：花括号 student = { &amp;#34;name&amp;#34;: &amp;#34;张三&amp;#34;, &amp;#34;age&amp;#34;: 20, &amp;#34;score&amp;#34;: 85 } print(student) # {&amp;#39;name&amp;#39;: &amp;#39;张三&amp;#39;, &amp;#39;age&amp;#39;: 20, &amp;#39;score&amp;#39;: 85} # 方式2：dict() 构造函数 person = dict(name=&amp;#34;李四&amp;#34;, age=25, city=&amp;#34;北京&amp;#34;) print(person) # {&amp;#39;name&amp;#39;: &amp;#39;李四&amp;#39;, &amp;#39;age&amp;#39;: 25, &amp;#39;city&amp;#39;: &amp;#39;北京&amp;#39;} # 方式3：由键值对列表创建 pairs = [(&amp;#34;name&amp;#34;, &amp;#34;王五&amp;#34;), (&amp;#34;age&amp;#34;, 30), (&amp;#34;city&amp;#34;, &amp;#34;上海&amp;#34;)] data = dict(pairs) print(data) # {&amp;#39;name&amp;#39;: &amp;#39;王五&amp;#39;, &amp;#39;age&amp;#39;: 30, &amp;#39;city&amp;#39;: &amp;#39;上海&amp;#39;} # 方式4：zip 创建 keys = [&amp;#34;name&amp;#34;, &amp;#34;age&amp;#34;, &amp;#34;city&amp;#34;] values = [&amp;#34;赵六&amp;#34;, 22, &amp;#34;广州&amp;#34;] info = dict(zip(keys, values)) print(info) # {&amp;#39;name&amp;#39;: &amp;#39;赵六&amp;#39;, &amp;#39;age&amp;#39;: 22, &amp;#39;city&amp;#39;: &amp;#39;广州&amp;#39;} # 方式5：字典推导式 squares = {x: x ** 2 for x in range(5)} print(squares) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} # 空字典 empty_dict = {} empty_dict2 = dict() 访问字典元素 student = {&amp;#34;name&amp;#34;: &amp;#34;张三&amp;#34;, &amp;#34;age&amp;#34;: 20, &amp;#34;score&amp;#34;: 85} # 使用方括号访问（键不存在会报错） print(student[&amp;#34;name&amp;#34;]) # 张三 print(student[&amp;#34;age&amp;#34;]) # 20 # print(student[&amp;#34;grade&amp;#34;]) # KeyError!</description>
    </item>
    <item>
      <title>列表与元组详解</title>
      <link>/posts/2026/05/list-tuple/</link>
      <pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/list-tuple/</guid>
      <description>前面我们学习了字符串，它是 Python 中的一种序列类型。今天我们将学习另外两种非常重要的序列类型——列表和元组。它们可以存储多个元素，是 Python 编程中使用最频繁的数据结构之一。&#xA;列表（List） 列表是 Python 中最灵活、最常用的序列类型。它是一个有序、可变的容器，可以存储任意类型的元素。&#xA;创建列表 # 创建列表的几种方式 empty_list = [] # 空列表 numbers = [1, 2, 3, 4, 5] # 整数列表 mixed = [1, &amp;#34;hello&amp;#34;, 3.14, True] # 混合类型 nested = [[1, 2], [3, 4], [5, 6]] # 嵌套列表（二维） # 使用 list() 构造 chars = list(&amp;#34;Python&amp;#34;) # [&amp;#39;P&amp;#39;, &amp;#39;y&amp;#39;, &amp;#39;t&amp;#39;, &amp;#39;h&amp;#39;, &amp;#39;o&amp;#39;, &amp;#39;n&amp;#39;] range_list = list(range(5)) # [0, 1, 2, 3, 4] # 列表推导式（创建列表的简洁方式） squares = [x ** 2 for x in range(10)] # [0, 1, 4, 9, .</description>
    </item>
    <item>
      <title>字符串操作深入</title>
      <link>/posts/2026/05/string-operations/</link>
      <pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/string-operations/</guid>
      <description>字符串是 Python 中使用最频繁的数据类型之一。无论是从用户获取输入、读写文件、处理网络数据，还是生成报告，字符串操作无处不在。Python 的字符串处理能力非常强大，掌握好字符串操作能让你在处理文本时事半功倍。&#xA;字符串基础 创建字符串 # 四种创建方式 s1 = &amp;#39;单引号字符串&amp;#39; s2 = &amp;#34;双引号字符串&amp;#34; s3 = &amp;#39;&amp;#39;&amp;#39;三单引号 支持换行&amp;#39;&amp;#39;&amp;#39; s4 = &amp;#34;&amp;#34;&amp;#34;三双引号 也支持换行&amp;#34;&amp;#34;&amp;#34; print(s1) # 单引号字符串 print(s2) # 双引号字符串 print(s3) # 三单引号\n支持换行 单引号 vs 双引号 两种方式完全等价，选择标准是方便性：&#xA;# 字符串本身包含单引号时，用双引号更省事 msg1 = &amp;#34;It&amp;#39;s a beautiful day&amp;#34; # 不用转义 msg2 = &amp;#39;It\&amp;#39;s a beautiful day&amp;#39; # 需要转义 # 字符串本身包含双引号时，用单引号更省事 msg3 = &amp;#39;他说：&amp;#34;你好&amp;#34;&amp;#39; msg4 = &amp;#34;他说：\&amp;#34;你好\&amp;#34;&amp;#34; 字符串索引与切片 索引 Python 字符串支持正索引（从 0 开始）和负索引（从 -1 开始）：&#xA;text = &amp;#34;Python&amp;#34; # 正索引（从 0 到 length-1） print(text[0]) # P print(text[1]) # y print(text[5]) # n # 负索引（从 -1 到 -length） print(text[-1]) # n（最后一个字符） print(text[-2]) # o（倒数第二个） print(text[-6]) # P（第一个字符） # 索引越界 # print(text[100]) # IndexError: string index out of range 切片（Slicing） 切片是 Python 最强大的特性之一，语法为 [start:stop:step]：</description>
    </item>
    <item>
      <title>运算符与表达式</title>
      <link>/posts/2026/05/operators-expressions/</link>
      <pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/operators-expressions/</guid>
      <description>前面两篇文章我们学习了变量和数据类型，现在你已经能用变量存储各种数据了。但仅仅存储数据是不够的——我们需要对数据进行操作和计算。这就需要用到运算符和表达式。&#xA;在 Python 中，表达式是由变量、字面量和运算符组成的可求值代码片段。例如 2 + 3 是一个表达式，它的值是 5。&#xA;算术运算符 算术运算符用于执行数学计算，是编程中最基础的操作。&#xA;# 基本算术运算 a = 10 b = 3 print(f&amp;#34;a + b = {a + b}&amp;#34;) # 13 加法 print(f&amp;#34;a - b = {a - b}&amp;#34;) # 7 减法 print(f&amp;#34;a * b = {a * b}&amp;#34;) # 30 乘法 print(f&amp;#34;a / b = {a / b}&amp;#34;) # 3.3333333333333335 除法（结果总是浮点数） print(f&amp;#34;a // b = {a // b}&amp;#34;) # 3 整除（向下取整） print(f&amp;#34;a % b = {a % b}&amp;#34;) # 1 取余（模运算） print(f&amp;#34;a ** b = {a ** b}&amp;#34;) # 1000 幂运算 整除的细节 整除 // 的结果是&amp;quot;向下取整&amp;quot;，对于负数需要特别注意：</description>
    </item>
    <item>
      <title>变量与基本数据类型</title>
      <link>/posts/2026/05/variables-datatypes/</link>
      <pubDate>Sat, 02 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/variables-datatypes/</guid>
      <description>在上一篇文章中，我们搭建好了开发环境并成功运行了第一个 Python 程序。从这篇文章开始，我们将正式进入 Python 编程的核心内容。今天要学习的是编程中最基础的概念——变量与数据类型。&#xA;变量 变量是用于存储数据的&amp;quot;容器&amp;quot;。你可以把它想象成一个贴了标签的盒子——标签是变量名，盒子里装的是数据。&#xA;变量的赋值 Python 中使用 = 进行赋值操作：&#xA;# 基本赋值 name = &amp;#34;小明&amp;#34; age = 25 height = 1.75 is_student = True # 输出变量 print(name) # 小明 print(age) # 25 print(height) # 1.75 print(is_student) # True Python 是动态类型语言，变量的类型在赋值时自动确定，且可以随时改变：&#xA;# 动态类型示例 x = 10 # x 是整数 print(type(x)) # &amp;lt;class &amp;#39;int&amp;#39;&amp;gt; x = &amp;#34;Hello&amp;#34; # x 现在是字符串 print(type(x)) # &amp;lt;class &amp;#39;str&amp;#39;&amp;gt; x = 3.14 # x 现在是浮点数 print(type(x)) # &amp;lt;class &amp;#39;float&amp;#39;&amp;gt; 多重赋值 Python 支持简洁的多重赋值语法：</description>
    </item>
    <item>
      <title>Python 从入门到精通</title>
      <link>/posts/2026/05/python-course/</link>
      <pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/python-course/</guid>
      <description>Python 是当今最流行、最通用的编程语言之一。无论你是想进入数据分析、Web 开发、自动化运维、人工智能还是游戏开发领域，Python 都是绝佳的起点。它的语法简洁优雅，学习曲线平缓，社区生态极其丰富——从 NASA 到 Instagram，从谷歌到 Netflix，无数组织和项目都在使用 Python。&#xA;本系列教程将从零开始，系统地带你掌握 Python 的核心知识和实战技能。从基础语法到高级特性，从面向对象编程到并发处理，从标准库到工程实践，覆盖 Python 开发的完整知识体系。&#xA;课程大纲 基础入门篇 Python 简介与开发环境搭建 变量与基本数据类型 运算符与表达式 字符串操作深入 列表与元组详解 字典与集合 条件判断与分支控制 循环结构与迭代 函数与模块篇 函数定义与参数传递 作用域、闭包与命名空间 高阶函数与 Lambda 表达式 模块与包管理 文件读写与 IO 操作 异常处理与调试 面向对象篇 类与对象基础 继承与多态 魔法方法与运算符重载 属性装饰器与 property 上下文管理器与 with 语句 迭代器与生成器 高级特性篇 装饰器深入与实践 正则表达式从入门到精通 日期与时间处理 常用标准库精讲 并发编程：多线程与多进程 异步编程与 asyncio 工程实战篇 测试入门：unittest 与 pytest 虚拟环境与依赖管理 网络请求与 API 调用 综合实战：构建命令行工具 本系列文章使用 Python 3.13+ 版本，所有代码示例均可直接运行。建议在学习过程中亲自动手敲一遍代码，这样才能真正掌握。&#xA;Summary: Python 从入门到精通，30 篇系统教程。</description>
    </item>
    <item>
      <title>Python 简介与开发环境搭建</title>
      <link>/posts/2026/05/python-intro/</link>
      <pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/python-intro/</guid>
      <description>欢迎来到&amp;quot;Python 从入门到精通&amp;quot;系列的第一篇文章！在本系列中，我们将从零开始，系统地学习 Python 编程语言。无论你是完全没有编程经验的新手，还是希望巩固基础的开发者，这篇文章都是你踏上 Python 之旅的起点。&#xA;Python 是什么？ Python 是一种高级、解释型、通用编程语言，由荷兰程序员 Guido van Rossum 于 1989 年圣诞节期间开始设计，1991 年发布了第一个版本。Python 的设计哲学强调代码的可读性和简洁性，它的名字来源于 Guido 喜爱的英国喜剧团体 Monty Python&amp;rsquo;s Flying Circus。&#xA;Python 的核心特点 特点 说明 简洁易读 Python 使用缩进而不是花括号来组织代码块，语法接近自然语言 解释执行 Python 代码由解释器逐行执行，无需编译步骤，开发效率高 动态类型 变量不需要声明类型，运行时自动推断 跨平台 一次编写，可在 Windows、macOS、Linux 等系统上运行 丰富的生态 拥有超过 40 万个第三方包，覆盖 Web、数据科学、AI 等所有领域 免费开源 Python 使用 PSF 许可证，可自由使用和分发 谁在使用 Python？ Python 的应用范围极其广泛，以下是一些知名用户和场景：&#xA;Google：搜索引擎核心算法、YouTube 后端 Netflix：内容推荐系统、数据处理流水线 Instagram：后端 API，每天处理数十亿请求 NASA：科学计算和数据分析 Spotify：音乐推荐算法 豆瓣：几乎所有后端服务都用 Python 构建 Python 的主要应用领域 # Python 在不同领域的应用示例 fields = { &amp;#34;Web 开发&amp;#34;: &amp;#34;Django, Flask, FastAPI&amp;#34;, &amp;#34;数据分析&amp;#34;: &amp;#34;Pandas, NumPy, SciPy&amp;#34;, &amp;#34;人工智能&amp;#34;: &amp;#34;TensorFlow, PyTorch, scikit-learn&amp;#34;, &amp;#34;自动化运维&amp;#34;: &amp;#34;Ansible, SaltStack&amp;#34;, &amp;#34;游戏开发&amp;#34;: &amp;#34;Pygame, Panda3D&amp;#34;, &amp;#34;桌面应用&amp;#34;: &amp;#34;PyQt, Tkinter, Kivy&amp;#34;, &amp;#34;网络爬虫&amp;#34;: &amp;#34;Scrapy, BeautifulSoup&amp;#34;, &amp;#34;DevOps&amp;#34;: &amp;#34;Docker Compose, AWS CDK&amp;#34; } for field, tools in fields.</description>
    </item>
  </channel>
</rss>
