3、Python基础知识:注释、变量以及数据类型、标识符和关键字、输入函数、输出函数、运算符、程序类型转换

说实话,很多做DaVinci配置的工程师,一看到Python就头大。觉得这是纯软件的事,跟自己没关系。我当年也这么想,直到有一次在配置CAN通信矩阵时,手动改了200多行信号定义,改到眼花缭乱,结果还漏了一个字节偏移量……

从那以后,我下定决心把Python捡起来。你想想看,用脚本批量处理配置数据,几分钟搞定别人一天的工作量,这感觉多爽?

好,咱们今天就把Python最基础、最核心的几个知识点过一遍。别怕,都是干货,没有废话。

3.1 注释:代码里的“便签纸”

注释这东西,说白了就是写给程序员自己看的。机器执行代码时,会直接忽略它。我个人的习惯是:写注释就像给未来的自己留纸条,防止三个月后回来看代码,一脸懵。

Python里两种注释方式:

  • 单行注释:用 # 开头,后面跟注释内容。
  • 多行注释:用三个单引号 ''' 或三个双引号 """ 包裹。
# 这是单行注释,我经常用它解释某一行代码的意图
speed = 100  # 设置初始速度为100 km/h

"""
这是多行注释
通常用来写函数说明、模块介绍
比如下面这个函数,是用来计算报文周期的
"""
def calc_period(base_time, factor):
    return base_time * factor

我的小技巧:在DaVinci配置脚本里,我习惯在关键算法前加一段多行注释,写明输入输出是什么。这样同事接手时,不用追着我问。

3.2 变量以及数据类型

变量,你可以把它想象成一个带标签的盒子。你把数据放进去,然后通过标签来取用。Python里不需要提前声明变量类型,直接赋值就行。这点跟C语言很不一样,刚转过来时我还有点不习惯。

常见的数据类型:

类型 名称 示例 说明
int 整型 count = 10 整数,比如报文ID、计数器
float 浮点型 voltage = 12.5 小数,比如电压值、温度值
str 字符串 name = "CAN1" 文本,用引号包裹
bool 布尔型 flag = True 只有True或False
list 列表 ids = [0x100, 0x200] 有序集合,可修改
dict 字典 car = {"name":"BMW", "speed":120} 键值对,像查字典一样
# 我在项目中经常这样用
ecu_name = "ECU_A"          # 字符串
message_id = 0x123          # 整型,十六进制表示
signal_value = 3.14         # 浮点型
is_enabled = True           # 布尔型
signal_list = ["Speed", "RPM", "Temp"]  # 列表

注意:Python是动态类型语言。同一个变量,你可以在不同时刻赋不同类型的值。但我不建议你这么做,容易把自己绕晕。保持一个变量只存一种类型的数据,这是好习惯。

3.3 标识符和关键字

标识符就是你给变量、函数、类起的名字。关键字是Python已经“预定”了的词,你不能拿来当变量名。

命名规则:

  • 只能包含字母、数字、下划线
  • 不能以数字开头
  • 区分大小写(Speedspeed 是两个不同的变量)
  • 不能使用关键字

常见关键字(你暂时记住这些就够了):

False, True, None, and, or, not, if, else, elif, for, while, break, continue, return, def, class, import, from, in, is, as, try, except, finally, with, pass

我曾经踩过的坑:有一次我图省事,把变量名起成了 class,结果Python直接报错。我愣了半天才反应过来——class 是关键字啊!所以,起名字时别偷懒,避开这些“雷区”。

3.4 输入函数 input()

input() 用来从键盘获取用户输入。注意,它返回的永远是字符串类型。哪怕你输入的是数字,它也是字符串。

# 获取用户输入的ECU名称
ecu = input("请输入ECU名称:")
print("你输入的ECU是:", ecu)

# 获取数字时,需要手动转换
age = input("请输入信号周期(ms):")
period = int(age)  # 把字符串转成整数
print("周期为:", period, "ms")

我的建议:在写配置脚本时,我很少用input(),因为自动化脚本不需要人工交互。但如果你在写测试小工具,input() 就很有用了,可以让用户动态输入参数。

3.5 输出函数 print()

print() 是Python里最常用的输出函数。它可以一次输出多个值,用逗号隔开就行。

# 基本用法
print("Hello, DaVinci!")

# 输出多个值
name = "CAN_FD"
baud = 500
print("总线类型:", name, ",波特率:", baud, "kbps")

# 格式化输出(我比较喜欢这种方式)
print(f"总线类型:{name},波特率:{baud}kbps")

为什么我推荐 f-string(就是上面那个 f 开头的写法)?因为它直观、可读性强。你一眼就能看出哪个变量对应哪个位置。这在调试配置脚本时特别有用。

3.6 运算符

运算符就是用来做运算的符号。Python里的运算符种类挺多,但常用的就这几类。

算术运算符:

运算符描述示例
+10 + 5 = 15
-10 - 5 = 5
*10 * 5 = 50
/10 / 3 = 3.333...
//整除10 // 3 = 3
%取余10 % 3 = 1
**幂运算2 ** 3 = 8

比较运算符:返回布尔值 True 或 False

==  # 等于
!=  # 不等于
>   # 大于
<   # 小于
>=  # 大于等于
<=  # 小于等于

逻辑运算符:

and  # 与:两边都为True,结果才为True
or   # 或:只要一边为True,结果就为True
not  # 非:取反
# 我在配置脚本里经常这样用
if signal_value > 100 and signal_value < 200:
    print("信号值在合理范围内")

# 或者判断某个ID是否在列表中
if 0x123 in id_list:
    print("该ID已存在")

3.7 程序类型转换

类型转换,就是把一种数据类型转成另一种。Python里有两种方式:隐式转换和显式转换。

隐式转换:Python自动帮你转。比如整数和浮点数做运算时,整数会自动转成浮点数。

result = 10 + 3.14  # 结果是 13.14,float类型

显式转换:你手动调用转换函数。常用的有:

  • int(x):把x转成整数
  • float(x):把x转成浮点数
  • str(x):把x转成字符串
  • list(x):把x转成列表
# 显式转换示例
str_num = "123"
int_num = int(str_num)      # 字符串转整数
print(int_num + 1)          # 输出 124

# 注意:不是所有字符串都能转
# int("abc")  # 这行会报错,因为"abc"不是数字

我曾经犯过的错:有一次我从配置文件里读出一个字符串 "12.5",想把它当整数用。直接用了 int("12.5"),结果报错了。为什么?因为 "12.5" 是浮点数字符串,必须先转成 float,再转成 int。正确的做法是:int(float("12.5"))

好了,Python基础就这些。别小看它们,DaVinci配置脚本里90%的代码,用的就是这些知识。你把这些吃透了,后面写自动化脚本就会顺手很多。