SMARTWATCH 学习手册有 C 基础 · 嵌入式从零开始
支线四 / 数据、训练与部署 / 00

Python 语法入门:先把数据读进程序

沿着已有 C 基础,补上缩进、列表、切片、模块和对象。最后读两行采样记录,为后面的数据处理准备最小语言工具。

主线传感器、采样、窗口与 FreeRTOS;Python 篇从语言差异讲起。

1 · 入口、缩进和变量怎样读

完整 Python 3 程序

def average(values):
    return sum(values) / len(values)

def main():
    readings = [3900, 4000, 4100]
    for value in readings:
        print(value)
    print(average(readings))

if __name__ == "__main__":
    main()

def 定义函数,冒号后用一致缩进表示函数或循环体。Python 不用 C 的花括号和行末分号。变量无需先写 int 类型,但对象仍有具体类型;把文字当数字计算依然会报错。/ 是除法,// 是向下取整除法,与负数时的 C 整数除法习惯有差别。

最后两行表示这个文件作为程序执行时调用 main;被其他脚本 import 时不自动运行该入口。先让每个小文件能直接执行,也能复用其中已解释的函数。

2 · 列表、字典与切片

放在函数里运行

readings = [3900, 4000, 4100]
first_two = readings[:2]
last = readings[-1]
names = {0: "still", 1: "moving"}
for index, value in enumerate(readings):
    print(index, value)
print(first_two, last, names[1])

列表可以保存多项对象,下标从零开始,负一下标表示最后一项。[:2] 取开头到下标 2 之前,切片右边界不包含在结果中。字典通过键寻找值,enumerate 同时提供下标与内容。

a = readings 让两个名称引用同一个列表,修改其中一项会从两个名称都看到;普通列表切片生成新列表,但其中对象本身可能仍共享。后面的 NumPy 切片更可能是共享存储的视图,需要逐项确认。

3 · 怎样从文件读出数值

capture.csv 第一行需包含 ax 列名

import csv

with open("capture.csv", encoding="utf-8", newline="") as f:
    rows = list(csv.DictReader(f))
values = [float(row["ax"]) for row in rows]
print(values[:3])

import 引入已有模块,csv 是标准库的表格文本读取工具。with 在代码块结束时关闭文件。CSV 中读到的字段是字符串,float 转为数值;空字段和错误文本不能直接忽略,需要定位到采集记录。列表推导式把逐行转换写成紧凑的一行,第一次可以改写成普通 for 循环对照。

文件路径按运行目录或明确绝对路径查找,文件找不到先确认位置,不要修改数据内容掩盖错误。真实采集还要记录通道单位、时间与动作标签。

4 · 类和继承为什么会出现在训练代码里

类把一份数据和相关操作放在一起

class Measurement:
    def __init__(self, millivolts):
        self.millivolts = millivolts

    def describe(self):
        return f"{self.millivolts} mV"

print(Measurement(4000).describe())

__init__ 在对象初始化时接收数据,self 表示当前对象;self.millivolts 是对象字段,describe 是方法。f 字符串把表达式值插入文字。训练框架的模型类通常继承 nn.Module 并实现 forward,届时再说明框架为何这样调用;小数据处理函数不需要全部改成类。

5 · 准备依赖,再独立验证语法

在复制出的支线示例目录中运行

python -m venv .venv
# 激活方式按所用终端选择:Windows PowerShell 使用 .venv/Scripts/Activate.ps1
python -m pip install -r requirements.txt
python python_basics.py

venv 为本次练习建立独立 Python 环境,pip 准备第三方依赖。语言基础示例只用标准库;NumPy、PyTorch、ONNX Runtime 在相应篇目才使用。保存实际依赖版本,运行训练后也保存配置,避免同一个名称对应不同实验环境。

动手观察

运行下载示例,把切片改成 [1:],说明输出为何改变。故意让 CSV 某一行含非数字内容,找到失败位置。先完成这些观察,再进入数组与模型。

资料与代码

配套文件

先复制到独立练习目录;用法见 支线示例说明。