2、Python基础速通(上):语法特性、变量与数据类型、流程控制、函数、列表与字典
各位同学,咱们直接进入正题。
做材料信息学,说白了就是用代码去处理材料数据、跑模型、搭平台。Python 是绕不开的工具。这一章我带你快速过一遍 Python 的核心基础,都是我在实际项目中天天用的东西。你不需要死记硬背,理解思路、能上手写就行。
2.1 Python 语法特性:为什么它适合材料信息学
Python 最大的特点是什么?简单、直接、上手快。
我个人习惯把它叫做「可执行的伪代码」。你想想看,在材料科学里,我们经常要快速验证一个想法——比如从 CSV 里读一批实验数据,算个平均值,再画个图。用 C++ 写可能要 50 行,Python 10 行搞定。
核心语法特性速览:
- 动态类型:变量不用声明类型,直接赋值就行。比如
a = 42,过一行你还能写成a = "hello"。这在快速原型开发时特别爽。 - 强制缩进:用缩进表示代码块,而不是花括号。刚开始可能不习惯,但习惯了之后代码会非常整洁。
- 解释执行:写完就能跑,不用编译。调试起来快得多。
- 丰富的内置类型:列表、字典、集合、元组,开箱即用。
💡 我的小经验:在搭建材料数据库时,我经常用 Python 的交互式环境(REPL)来快速测试一段数据处理逻辑。比如先读 5 条记录看看格式对不对,再写完整的脚本。这比「写完一整套再跑」要高效得多。
2.2 变量与数据类型:存数据的基本功
变量就是给数据起个名字。Python 里变量名可以包含字母、数字、下划线,但不能以数字开头。
# 常见数据类型示例
material_name = "钛合金" # 字符串 str
density = 4.51 # 浮点数 float
atomic_number = 22 # 整数 int
is_conductive = True # 布尔值 bool
unknown_param = None # 空值 NoneType
# 查看类型
print(type(material_name)) # <class 'str'>
print(type(density)) # <class 'float'>
这里有个坑,我刚开始学的时候踩过——类型转换。比如从文件里读到的数字往往是字符串,直接做加法会变成拼接。
⚠️ 我曾经犯过的错:从 Excel 里读了一列「密度」数据,没做类型转换就直接算平均值,结果 Python 把字符串拼在了一起,输出一个奇怪的长数字。排查了半天才发现问题。所以记住:float("4.51") 才能转成真正的数字。
常用的类型转换函数:
| 函数 | 作用 | 示例 |
|---|---|---|
int(x) | 转整数 | int("42") → 42 |
float(x) | 转浮点数 | float("3.14") → 3.14 |
str(x) | 转字符串 | str(100) → "100" |
bool(x) | 转布尔值 | bool(1) → True |
2.3 流程控制:让代码有判断、能循环
流程控制就三样:if 判断、for 循环、while 循环。掌握了它们,你就能写出有逻辑的程序了。
2.3.1 if 条件判断
temperature = 1200 # 单位:摄氏度
if temperature > 1000:
print("材料可能发生相变,请注意!")
elif temperature > 500:
print("材料处于高温状态")
else:
print("温度正常")
注意缩进!if、elif、else 后面的冒号别忘了。我见过不少新手因为少写冒号或者缩进不一致导致报错。
2.3.2 for 循环:遍历数据的好帮手
在材料信息学里,for 循环用得特别多——遍历一组实验数据、遍历文件列表、遍历数据库记录等等。
# 遍历列表
elements = ["Fe", "Ni", "Co", "Ti"]
for elem in elements:
print(f"当前元素:{elem}")
# 配合 range() 生成数字序列
for i in range(5):
print(f"第 {i+1} 次实验")
实用技巧:用 enumerate() 同时获取索引和值:
for idx, elem in enumerate(elements):
print(f"第{idx}个元素是{elem}")
2.3.3 while 循环:条件满足就一直跑
while 适合你不知道要循环多少次的情况。比如不断尝试连接数据库,直到成功为止。
attempt = 0
while attempt < 3:
print(f"尝试第 {attempt+1} 次连接...")
# 模拟连接成功
if attempt == 2:
print("连接成功!")
break
attempt += 1
else:
print("连接失败,请检查网络")
注意 break 可以提前跳出循环,continue 可以跳过本次循环的剩余部分。这两个关键字我几乎每天都会用到。
2.4 函数定义与作用域:把代码组织起来
函数就是一段可以重复调用的代码块。我建议你养成习惯:只要一段逻辑出现两次以上,就把它写成函数。
def calculate_density(mass, volume):
"""计算密度:质量除以体积"""
if volume == 0:
return None # 避免除零错误
return mass / volume
# 调用函数
density_result = calculate_density(12.5, 3.2)
print(f"密度为:{density_result:.2f} g/cm³")
关于作用域,记住一句话:函数内部定义的变量,外面看不到;外面定义的变量,函数内部可以读,但修改要加 global 关键字。
💡 我的习惯:我一般尽量少用全局变量,把数据通过参数传进函数,结果通过 return 返回。这样代码更清晰,也更容易调试。在搭建材料数据库的 API 时,这个原则帮我避免了很多莫名其妙的 bug。
2.5 列表与字典操作:最常用的两种数据结构
列表和字典,可以说是 Python 数据处理的左膀右臂。列表存有序的数据,字典存键值对。
2.5.1 列表操作
# 创建列表
materials = ["钢", "铝", "铜", "钛"]
print(materials[0]) # 钢(索引从0开始)
print(materials[-1]) # 钛(负索引从末尾开始)
# 增删改
materials.append("镁") # 末尾添加
materials.insert(1, "锌") # 指定位置插入
materials.remove("铝") # 删除指定元素
popped = materials.pop() # 弹出末尾元素
materials[0] = "不锈钢" # 修改元素
# 切片
subset = materials[1:3] # 取索引1到2的元素
print(subset) # ['锌', '铜']
2.5.2 字典操作
字典在材料信息学里特别实用——比如存储一种材料的多个属性。
# 创建字典
material_props = {
"name": "钛合金",
"density": 4.51,
"melting_point": 1668,
"elements": ["Ti", "Al", "V"]
}
# 访问
print(material_props["name"]) # 钛合金
print(material_props.get("cost", "未知")) # 安全访问,不存在返回默认值
# 修改与添加
material_props["density"] = 4.43 # 修改
material_props["cost"] = 200 # 新增键值对
# 遍历
for key, value in material_props.items():
print(f"{key}: {value}")
列表与字典的嵌套:实际项目中经常组合使用。比如一个材料数据库:
database = [
{"name": "钢", "density": 7.85, "conductivity": 0.1},
{"name": "铜", "density": 8.96, "conductivity": 0.9},
{"name": "铝", "density": 2.70, "conductivity": 0.6}
]
# 找出导电性最好的材料
best = max(database, key=lambda x: x["conductivity"])
print(best["name"]) # 铜
⚠️ 我曾经踩过的坑:用列表的 copy() 方法时,如果是嵌套列表,浅拷贝只会复制外层,内层列表还是共享的。修改一个会影响另一个。这种情况要用 copy.deepcopy()。做材料数据预处理时,这个细节坑了我一整个下午。
2.6 列表推导式:一行代码搞定循环
列表推导式是 Python 的特色语法,能让代码更简洁。说白了就是「把 for 循环压缩到一行里」。
# 传统写法
squares = []
for x in range(10):
squares.append(x**2)
# 列表推导式
squares = [x**2 for x in range(10)]
# 带条件的推导式
even_squares = [x**2 for x in range(10) if x % 2 == 0]
# 字典推导式
material_dict = {f"材料{i}": i*10 for i in range(5)}
刚开始可能觉得有点绕,但用多了你会发现它真的很方便。我处理材料数据时,经常用推导式来批量清洗数据——比如把所有密度值小于 0 的过滤掉。
好了,这一章的内容就到这里。Python 基础说难不难,说简单也不简单,关键是多练。下一章我们继续往下走,把字符串、元组、集合、文件操作这些补上。到时候你就能自己写一个完整的数据处理脚本了。
公众号:蓝海资料掘金营,微信deep3321