3、Python基础回顾:语法速览、数据类型、控制流、函数定义、文件操作

各位同学,咱们开始上课。今天这节是Python基础回顾,说白了就是帮大家把写脚本时最常用的那几块东西捋一遍。别觉得基础就跳过,我在HIL测试项目里见过太多因为基础不牢导致的低级bug了。

3.1 Python语法速览

Python的语法,我个人觉得是它最大的优点——简洁、可读性强。你想想看,一个循环用C语言要写好几行,Python一行搞定。

几个核心点:

  • 缩进就是一切:Python用缩进来表示代码块,而不是花括号。我习惯用4个空格,千万别混用Tab和空格,否则你会疯的。
  • 变量不用声明类型:直接赋值就行,比如 a = 10,Python会自动推断类型。
  • 注释用 #:单行注释用 #,多行注释可以用三个引号 '''"""
小技巧:写脚本时,我习惯在文件开头加一行 # -*- coding: utf-8 -*-,确保中文注释不乱码。这个坑我踩过。

3.2 数据类型

Python的数据类型,说白了就那几种。但咱们做HIL测试,最常用的就是数字、字符串和列表。

类型 示例 说明
int a = 10 整数,比如信号值、计数器
float b = 3.14 浮点数,比如电压、电流测量值
str c = "Hello" 字符串,比如测试用例名称
list d = [1, 2, 3] 列表,比如一组测试参数
dict e = {"key": "value"} 字典,比如信号名到值的映射
bool f = True 布尔值,用于条件判断

嗯,这里要注意:列表和字典是可变类型,字符串是不可变类型。什么意思?你改了字符串,其实是创建了一个新对象。我在项目中遇到过有人试图直接修改字符串里的某个字符,结果报错了。

重点:在dSPACE自动化测试中,我们经常用字典来存储信号映射关系,比如 signal_map = {"EngineSpeed": 0, "VehicleSpeed": 1},这样代码可读性会好很多。

3.3 控制流

控制流就是让代码按你的想法走。常用的就三个:if、for、while。

if 条件判断

if value > 100:
    print("超出范围")
elif value > 50:
    print("正常范围")
else:
    print("偏低")

我曾经在写测试脚本时,忘了加冒号,结果找了半天bug。记住:if、for、while后面都要加冒号。

for 循环

# 遍历列表
for signal in signal_list:
    print(signal)

# 配合range使用
for i in range(10):
    print(i)

while 循环

count = 0
while count < 5:
    print(count)
    count += 1
避坑指南:我曾经写过一个while循环,忘记加退出条件,结果脚本跑成了死循环,把整个HIL测试台架卡死了。所以用while时,一定要确保有退出机制。

3.4 函数定义

函数就是把一段重复用的代码封装起来。咱们写自动化测试脚本,函数是核心。

def read_signal(signal_name):
    """读取HIL信号值"""
    value = get_signal_value(signal_name)
    return value

def check_threshold(value, min_val, max_val):
    """检查信号是否在阈值范围内"""
    if min_val <= value <= max_val:
        return True
    else:
        return False

我个人习惯给每个函数写docstring(就是那个三引号里的说明),这样别人看代码时一目了然。你想想看,几个月后你自己回头看代码,没有注释的话,真的会忘。

函数参数可以设默认值:

def log_message(msg, level="INFO"):
    print(f"[{level}] {msg}")

log_message("测试开始")          # 默认INFO级别
log_message("错误发生", "ERROR")  # 指定ERROR级别
经验之谈:在dSPACE自动化测试中,我习惯把常用的操作封装成函数,比如读取信号、写入信号、等待时间等。这样主脚本会非常简洁,维护起来也方便。

3.5 文件操作

文件操作在测试脚本里太常用了。比如读取测试用例、保存测试结果、写日志文件。

读取文件

# 推荐用with语句,自动关闭文件
with open("test_cases.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

# 按行读取
with open("test_cases.txt", "r") as f:
    for line in f:
        print(line.strip())  # strip去掉换行符

写入文件

# 写入模式 'w' 会覆盖原文件
with open("result.txt", "w") as f:
    f.write("测试通过\n")

# 追加模式 'a' 会在文件末尾添加
with open("log.txt", "a") as f:
    f.write("2024-01-01 测试完成\n")
注意:我曾经犯过一个错,用 'w' 模式打开了一个重要的配置文件,结果内容全被清空了。所以写入前一定要确认模式对不对。另外,处理中文文件时记得加 encoding="utf-8",否则会乱码。

CSV文件操作:测试数据经常用CSV格式,Python有内置的csv模块:

import csv

# 读取CSV
with open("test_data.csv", "r") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)  # row是一个列表

# 写入CSV
with open("output.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["信号名", "期望值", "实际值"])
    writer.writerow(["EngineSpeed", 1000, 1002])

好了,Python基础就回顾到这里。这些内容看起来简单,但都是写自动化测试脚本的基石。下一节咱们就开始讲dSPACE的Python API了,到时候你会感谢今天认真复习的这些基础知识的。