第2章:Python基础回顾
各位同学,咱们开始上课。这一章我打算带大家快速过一遍Python的基础知识。你可能会问:“老师,我学过Python,能不能跳过?”我的建议是——别急。我在自动化项目里见过太多人,因为基础不牢,写出来的脚本跑着跑着就崩了。咱们花点时间,把地基打扎实。
2.1 Python环境配置
做仪器仪表自动化,Python环境其实没那么复杂。我个人习惯用Anaconda,因为它把科学计算库都打包好了。你想想看,要是手动装numpy、scipy、pandas这些库,光解决依赖冲突就够你喝一壶的。
安装步骤很简单:
- 去Anaconda官网下载安装包
- 一路默认安装,记得勾选“Add to PATH”
- 打开命令行,输入
python --version验证
嗯,这里要注意。如果你用的是公司内网,可能没法直接下载。那就用Miniconda,轻量级,够用。或者直接装官方Python,然后手动装库。我建议你装个IDE,PyCharm或者VS Code都行。我个人偏爱VS Code,插件丰富,调试方便。
2.2 基本语法
Python的语法,说白了就是“用缩进代替大括号”。刚开始你可能不习惯,但用久了你会发现——真香。代码看起来干净多了。
变量与数据类型
Python是动态类型语言,变量不用声明类型。比如:
# 这是我常用的写法
temperature = 25.6 # 浮点数,温度值
pressure = 101.3 # 浮点数,压力值
is_online = True # 布尔值,设备状态
device_name = "GC-2014" # 字符串,设备型号
我在项目中遇到过一个问题:有人把字符串当数字用了,结果计算时报错。所以记住,类型转换要显式做:
value = "25.6"
real_value = float(value) # 转成浮点数
条件判断与循环
控制流程这块,咱们做仪器控制时用得特别多。比如判断设备是否就绪:
if device_status == "ready":
start_measurement()
elif device_status == "error":
log_error()
else:
wait_for_device()
循环呢?我经常用它来轮询设备状态:
# 轮询直到设备完成
while not device.is_idle():
time.sleep(0.5) # 等500毫秒再查
print("设备工作中...")
你想想看,要是没有循环,你得写多少重复代码?
2.3 数据结构
这部分是重点。做自动化流程控制,数据结构的选型直接影响代码的效率和可读性。
列表(List)
列表就是一组有序的数据。我常用它来存测量结果:
# 存储一组温度数据
temperatures = [25.1, 25.3, 25.0, 25.2, 25.4]
# 添加新数据
temperatures.append(25.5)
# 访问第3个数据(索引从0开始)
print(temperatures[2]) # 输出 25.0
if len(data) > index:
字典(Dictionary)
字典是键值对,特别适合存设备参数。比如:
# 配置一台色谱仪的参数
gc_config = {
"model": "GC-2014",
"column_temp": 150,
"injector_temp": 250,
"detector_temp": 300,
"flow_rate": 1.2
}
# 修改某个参数
gc_config["column_temp"] = 160
# 获取参数值
print(gc_config.get("column_temp", "未设置"))
我个人习惯用字典来管理多台设备的配置。你想想看,要是用列表存,你得记住每个位置对应什么参数,多累啊。
元组(Tuple)
元组和列表很像,但它是不可变的。我一般用它来存固定配置:
# 仪器支持的测量模式,不可修改
measurement_modes = ("single", "continuous", "timed")
# 访问
print(measurement_modes[1]) # 输出 "continuous"
2.4 函数与模块
写自动化脚本,最忌讳的就是“一坨代码”。我见过有人把几百行代码写在一个文件里,调试起来简直要命。函数和模块就是用来解决这个问题的。
函数
函数就是把一段逻辑封装起来,方便重复调用。比如:
def read_temperature(device_id, channel):
"""
读取指定设备指定通道的温度值
:param device_id: 设备ID
:param channel: 通道号
:return: 温度值(浮点数)
"""
# 这里是读取硬件的代码
value = 25.6 # 模拟读取
return value
# 调用函数
temp = read_temperature("GC-2014", 1)
print(f"温度值: {temp}°C")
嗯,这里要注意。函数命名要清晰,别用a、b、c这种。我在项目中看到过def f1(x):这样的函数,三个月后连写代码的人自己都看不懂了。
模块
模块就是把相关的函数和变量放在一个.py文件里。比如,你可以创建一个instrument_utils.py:
# instrument_utils.py
def connect_device(ip, port):
print(f"连接到 {ip}:{port}")
# 连接逻辑
def disconnect_device():
print("断开连接")
# 断开逻辑
def read_data():
print("读取数据")
# 读取逻辑
然后在主程序里导入:
import instrument_utils
instrument_utils.connect_device("192.168.1.100", 502)
data = instrument_utils.read_data()
instrument_utils.disconnect_device()
你想想看,这样代码多清晰。每个模块负责一块功能,出了问题也好定位。
- 环境配置:推荐Anaconda + Python 3.8/3.9
- 基本语法:缩进代替大括号,注意类型转换
- 列表:有序可变,适合存序列数据
- 字典:键值对,适合存配置参数
- 元组:不可变,适合存固定数据
- 函数:封装逻辑,提高复用性
- 模块:组织代码,便于维护
好了,这一章就到这里。下一章咱们开始讲Python在仪器控制中的实际应用——串口通信。到时候我会带大家写一个真正的设备控制脚本。记得把今天的内容消化掉,基础不牢,后面会吃力。