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已经“预定”了的词,你不能拿来当变量名。
命名规则:
- 只能包含字母、数字、下划线
- 不能以数字开头
- 区分大小写(
Speed和speed是两个不同的变量) - 不能使用关键字
常见关键字(你暂时记住这些就够了):
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%的代码,用的就是这些知识。你把这些吃透了,后面写自动化脚本就会顺手很多。