2、Python基础速通(上):语法特性、变量与数据类型、流程控制、函数、列表与字典

各位同学,咱们直接进入正题。

做材料信息学,说白了就是用代码去处理材料数据、跑模型、搭平台。Python 是绕不开的工具。这一章我带你快速过一遍 Python 的核心基础,都是我在实际项目中天天用的东西。你不需要死记硬背,理解思路、能上手写就行。

Python 基础速通(上)知识体系 Python 基础核心 语法特性 动态类型 · 缩进 · 解释执行 变量与数据类型 int/float/str/bool/None 流程控制 if/for/while · 缩进块 函数定义与作用域 def · return · 局部/全局 列表与字典操作 增删改查 · 嵌套 · 推导式

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