<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>闭包 on 老张开工了</title>
    <link>/%E9%97%AD%E5%8C%85/</link>
    <description>Recent content in 闭包 on 老张开工了</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sun, 10 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="/%E9%97%AD%E5%8C%85/index.xml" rel="self" type="application/rss+xml" />
    <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>
  </channel>
</rss>
