datawhalechina/learn-python-the-smart-way-v2: 聪明办法学Python,简明且系统的 Python 入门教程第二版。

datawhale AI 共学

命名、赋值、作用域、return、函数组合


1 · 变量(Variable)

概念 个人理解
本质 变量是 指针 / 标签,指向内存中一段数据,而非一个“盒子”。更换赋值只是在同一名字下重新绑定对象。
赋值 单次 =、就地运算 +=、链式 a = b = 0解包 x, y = y, x(原子交换)。
命名规则 首字符字母/下划线;区分大小写;避免保留字;可读性优先。PEP 8 推荐 snake_case
易错点 将数值 0 / 空串 "" 当作 “空”,应以 None 表示“无值”;布尔类型继承自 intTrue == 1
x = 5
x += 2          # 7
x, y = y, x     # 变量交换惯用法

2 · 函数(Function)

2.1 结构

def name(params: list) -> ReturnType:  # header / interface
    """docstring: what-why‐how"""      # optional, 强烈建议写
    # body / implementation
    return result
  • Header:声明名称 + 参数;冒号是“进院门”标记。

  • Body:统一缩进 4 空格;return输出而非打印。无显式 return 默认返回 None

  • 调用:严格匹配参数个数(除非使用可变参数或默认值,后续章节再谈)。

2.2 print vs return

情景 print return
调试 / 日志
作为数据管道的一环

先用 return 保持函数纯粹;需要可视化时在外层调用处打印。方便单元测试与复用。

2.3 多返回值

Python 通过 元组打包 / 解包 实现:

def stats(a, b):
    return a+b, abs(a-b)

s, diff = stats(4, 9)

3 · 表达式 vs 语句

分类 能否打印 例子
表达式 (expression) 2+3, "hi".upper(), func()
语句 (statement) def f():, if x>0:, x = 1

记忆:值可 print,动作不可 print


4 · 作用域(Scope)与可见性

4.1 LEGB 原则

Local → Enclosing (嵌套函数) → Global → Built-in,自里向外查找。

g = 100        # global

def f(x):
    local = x  # local
    return local + g

4.2 避免滥用 global

  • 全局变量破坏可预测性;仅在 配置常量缓存 场景少量使用,并配合只读约定 / typing.Final

  • 如果确需写全局显式 global name请谨慎


5 · 函数组合与 Helper Function

  • 组合:先执行内层 → 外层,阅读时由里而外解析。

  • Helper:抽出重复逻辑 (ones_digit, normalize, …),提升可读性 & 可测试性。

  • 调试建议:手绘调用栈或用 pythontutor.com 可视化,直观理解值如何流动。


6 · 常见坑

误区 规避策略
print 当返回值用 编写单元测试时立即暴露——测试不能依赖控制台输出
默认可变对象作参数 使用 None + 在函数内实例化新对象
忽视浮点比较 math.isclose() / decimal.Decimal
过度全局状态 设计纯函数;必要全局用只读常量 + 类型检查

7 · 小结 Checklist

  • 变量是名称到对象的绑定;赋值即重绑定。

  • 函数 = 可复用的语句块,return 把数据交还给调用者。

  • 理解表达式 vs 语句区别,调试时只打印表达式。

  • 熟悉 LEGB 搜索链,少用 global

  • 借助 helper / composition 管理复杂度。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐