Python基础语法速查:变量、循环与函数入门详解

Leo
Leo
发布时间:2026-11-04| 3人浏览过
原创

本篇Python基础语法速查指南聚焦变量命名与内存引用、for/while循环控制流以及函数定义与参数解包三大核心支柱,提供详实的代码示例、原理图解与避坑速查表。

Python 核心基础速查

运行环境要求:Python 3.8+ 标准解释器环境

编写程序的核心本质可以浓缩为三件事:使用变量存储与管理数据状态,借助循环控制重复计算与数据流转,以及利用函数封装可复用的执行逻辑。本文系统梳理这三者的核心语法规则、内部运作原理及典型陷阱,帮助初学者建立扎实、清晰的编程心智模型并提供高频操作速查。
Python基础语法速查:变量、循环与函数入门详解
概览:Python 语法三角基石 —— 变量(状态)、循环(流控)与函数(复用)

一、变量与核心数据类型速查

在 Python 中,定义变量无需事先声明类型,变量的创建发生在第一次给它赋值的时刻。标识符由英文字母、数字和下划线组成,不能以数字开头,且严格区分大小写。

# 基础赋值操作
user_id = 1001              # int 整型
pi_value = 3.14159           # float 浮点型
app_name = "DataCollector"   # str 字符串
is_active = True             # bool 布尔值

# 批量赋值与解构交换
count, threshold = 0, 50     # 多变量同时赋值
count, threshold = threshold, count  # 快速交换变量值(无需中间变量)

1.1 核心数据结构特性速查

Python 内置了四种最高频使用的组合数据结构,其性质与使用边界如下:

数据结构 声明语法 是否可变 是否有序 典型适用场景
列表 (list) [1, 2, "a"] 可变 有序 顺序数据流、需要动态增删的排序列
元组 (tuple) (1, 2, "a") 不可变 有序 只读常量集、函数多返回值、字典安全键
字典 (dict) {"key": "val"} 可变 有序 (3.7+) 键值对映射、结构化配置、快速哈希查找
集合 (set) {1, 2, 3} 可变 无序 成员关系去重、数学交集/并集运算

1.2 变量本质:“标签引用”而非“盒子容器”

许多初学者容易将变量误解为装数据的“盒子”,但在 Python 的底层实现中,变量仅仅是贴在内存对象上的名字标签。变量名保存在当前的命名空间中,它记录的是目标对象在堆内存中的内存地址引用。

区分不可变对象(int、float、str、tuple)与可变对象(list、dict、set)是理解变量赋值行为的关键:

  • 对于不可变对象,当对其进行修改计算时(例如 a = a + 1),解释器会在内存中分配一个新的对象并让变量指向新对象,原有对象不受影响。
  • 对于可变对象,多个变量指向同一个对象时(例如 list_b = list_a),通过其中任一变量修改对象内部内容(如 append()),其他变量访问到的内容会同步改变。
Python基础语法速查:变量、循环与函数入门详解
图 1:Python 变量“标签引用”模型与内存对象机制
避坑提醒:若需要复制一个独立的列表对象,切勿直接使用 list_b = list_a。应当使用显式拷贝语法:list_b = list_a.copy() 或切片 list_b = list_a[:]。如果列表中嵌套了子列表,需使用 copy.deepcopy() 进行深拷贝。

二、循环结构与控制流详解

循环负责按条件反复执行指定代码块。Python 主要提供了 for ... in 迭代循环与 while 条件循环两种形式。

2.1 for 循环与迭代器生态

Python 的 for 循环本质上是一个迭代器驱动模型,它逐一从可迭代容器(列表、元组、字符串、字典、生成器等)中获取元素,直至容器耗尽。

fruits = ["苹果", "香蕉", "樱桃"]

# 1. 直接遍历元素
for fruit in fruits:
    print(f"当前水果: {fruit}")

# 2. range() 数值区间生成:range(起始值, 结束值(不含), 步长)
for i in range(1, 6, 2):
    print(f"步长计数: {i}")  # 输出 1, 3, 5

# 3. enumerate() 同时获取索引与元素(强烈推荐,避免 range(len(...)) 陋习)
for idx, fruit in enumerate(fruits, start=1):
    print(f"第 {idx} 项是 {fruit}")

# 4. zip() 组合并行遍历多个序列
prices = [8.5, 4.0, 25.0]
for name, price in zip(fruits, prices):
    print(f"{name}: ¥{price}")
示例输出: 当前水果: 苹果
当前水果: 香蕉
当前水果: 樱桃
步长计数: 1
步长计数: 3
步长计数: 5
第 1 项是 苹果
第 2 项是 香蕉
第 3 项是 樱桃
苹果: ¥8.5
香蕉: ¥4.0
樱桃: ¥25.0

2.2 while 条件循环与死循环规避

while 循环在指定的布尔表达式为 True 时持续运行。编写 while 循环必须确保循环体内存在能够改变判断条件的语句,否则将陷入死循环,耗尽 CPU 资源。

# 标准计数循环
retries = 3
while retries > 0:
    print(f"正在尝试连接服务器,剩余次数: {retries}")
    retries -= 1  # 状态递减更新,确保跳出循环
print("尝试结束")

2.3 流程打断与分支控制:break、continue 与 else

循环内部可通过关键字进行精细控制:

  • break:立即终止整个循环,跳出循环体执行后续代码。
  • continue:立即跳过本次循环剩余语句,直接开始下一次循环判定。
  • else 子句:挂接在循环末尾。只有在循环自然迭代完毕(未被 break 中断)时才执行。该语法常用于元素搜索场景,无需额外设置布尔标记旗标。
Python基础语法速查:变量、循环与函数入门详解
图 2:Python 循环执行步骤与条件跳转流控图
# 演示:for...else 查找素数/目标项
target = 7
numbers = [2, 4, 6, 8, 10]

for n in numbers:
    if n == target:
        print(f"找到目标数字: {target}")
        break
else:
    # 循环完整遍历未触发 break 时执行
    print(f"遍历完成,列表中不存在 {target}")
示例输出: 遍历完成,列表中不存在 7

三、函数的定义、参数与作用域

函数是将独立功能的代码块组织在一起的命名单元。使用关键字 def 定义函数,通过括号 () 接收输入参数,使用 return 语句将处理结果传回调用方。

def calculate_rectangle_area(width: float, height: float) -> float:
    """计算矩形面积(包含类型提示与标准文档字符串)"""
    if width <= 0 or height <= 0:
        return 0.0  # 参数不合法时提前返回防御
    return width * height

result = calculate_rectangle_area(5.0, 3.0)
print(f"矩形面积为: {result}")  # 示例输出:矩形面积为: 15.0
说明:如果函数没有显式写出 return 语句,或者仅写了裸的 return,Python 会隐式返回内置单例 None。

3.1 四类函数参数模式解析

Python 提供了灵活的参数接收机制,在函数声明时必须严格遵守如下书写顺序:位置参数 > 默认值参数 > 可变位置参数 (*args) > 可变关键字参数 (**kwargs)。

Python基础语法速查:变量、循环与函数入门详解
图 3:Python 函数签名结构剖析与四级参数解包机制
def register_student(name, age=18, *hobbies, **contact_info):
    print(f"学生姓名: {name}, 年龄: {age}")
    print(f"兴趣爱好 (tuple 打包): {hobbies}")
    print(f"联系方式 (dict 打包): {contact_info}")

# 综合传参调用
register_student(
    "李华", 20, 
    "篮球", "阅读", "编程", 
    email="lihua@example.com", phone="13800000000"
)
示例输出: 学生姓名: 李华, 年龄: 20
兴趣爱好 (tuple 打包): ('篮球', '阅读', '编程')
联系方式 (dict 打包): {'email': 'lihua@example.com', 'phone': '13800000000'}
高危陷阱:可变对象切勿作为默认参数!
Python 函数的默认参数在模块加载定义时仅被求值初始化一次。如果使用 def append_item(val, container=[]),后续所有调用将共享同一个列表实例。正确做法是使用 None 作为占位哨兵:
def append_item(val, container=None):
    if container is None:
        container = []
    container.append(val)
    return container

3.2 变量作用域与 LEGB 解析规则

当在函数内部访问一个变量名时,Python 解释器按照固定优先级单向逐层向上检索变量:

  1. L (Local) 局部作用域:函数内部赋值定义的变量。
  2. E (Enclosing) 嵌套闭包作用域:外层包含函数的局部空间(常见于闭包或装饰器)。
  3. G (Global) 全局作用域:当前 Python 模块文件顶层定义的变量。
  4. B (Built-in) 内置作用域:Python 内置命名空间(如 len、range、ValueError)。

若要在函数内部重新给全局变量赋值,必须显式声明 global variable_name;若要在闭包内部修改外层局部变量,需声明 nonlocal variable_name。但在生产实践中,应尽量避免过度依赖全局变量,优先通过参数传递和函数返回值维持纯粹的数据流动。

四、综合应用实战与高频速查

下面通过一段完整的小型数据处理任务,演示如何协同组合变量定义、列表与字典迭代以及函数封装:

# 数据清洗与统计计算实战
def process_sales_records(raw_data, min_amount=0.0):
    """
    清洗并统计有效销售订单
    :param raw_data: 原始订单列表
    :param min_amount: 最小过滤金额阈值
    :return: 统计指标字典
    """
    valid_orders = []
    total_sales = 0.0

    for item in raw_data:
        # 数据解包与校验
        order_id = item.get("id")
        amount = item.get("amount", 0.0)

        # 过滤非正向异常金额或低于阈值的订单
        if amount < min_amount:
            continue

        valid_orders.append(order_id)
        total_sales += amount

    # 计算均值并返回结构化结果
    order_count = len(valid_orders)
    avg_sales = (total_sales / order_count) if order_count > 0 else 0.0

    return {
        "total_amount": round(total_sales, 2),
        "valid_count": order_count,
        "average_amount": round(avg_sales, 2),
        "order_ids": valid_orders
    }

# 模拟原始输入数据
orders_dataset = [
    {"id": "A101", "amount": 120.5},
    {"id": "A102", "amount": -15.0},  # 脏数据
    {"id": "A103", "amount": 340.0},
    {"id": "A104", "amount": 45.0}
]

stats = process_sales_records(orders_dataset, min_amount=50.0)
print("统计清洗结果:", stats)
示例输出: 统计清洗结果: {'total_amount': 460.5, 'valid_count': 2, 'average_amount': 230.25, 'order_ids': ['A101', 'A103']}
Python基础语法速查:变量、循环与函数入门详解
图 4:变量、循环与函数入门核心速查与避坑知识图谱

4.1 入门高频语法速查表

需求场景 标准推荐语法 注意事项与说明
解构与变量交换 a, b = b, a 右侧先打包为元组,再解包赋给左侧,原生线程安全且高效
安全读取字典键 d.get("key", default_val) 直接下标 d["key"] 遇到不存在键会报 KeyError
循环同时取索引 for i, v in enumerate(seq): 消除维护外部计数器或使用 range(len(...)) 的繁琐
多列表合并遍历 for a, b in zip(list1, list2): 遍历长度以较短的列表为准;若需补全可用 itertools.zip_longest
过滤列表推导式 [x*2 for x in nums if x > 0] 替代简短的 map/filter,更加 Pythonic,但不宜嵌套超过两层
收集不确定参数 def f(*args, **kwargs): args 是元组,kwargs 是字典,常用于包装器与委托
实参解包传递 func(*my_tuple, **my_dict) 将已有序列和字典直接解开并映射为函数的形参传入

掌握变量的引用本质、循环的跳出分支以及函数的参数规范,便已具备编写稳健 Python 程序的基础底座。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。