CHAPTER 02

变量、数据类型与运算

Python 存储和操作数据的基础。AI 中的每一个输入、权重、预测结果,都是某种数据类型的值。

变量:给数据贴标签

变量就是给数据起个名字,方便后续使用。可以把变量想象成一个盒子,你往盒子里放了某个值,之后用盒子的名字就能取出这个值。

核心概念

变量赋值(Assignment)

= 符号将右边的值存入左边的变量名。注意:Python 的 = 不是"等于",而是"赋值"——把右边的值放进左边的盒子里。

PYTHON · 变量基础
# 变量赋值:把右边的值存入左边的变量
model_name = "GPT-4o"      # 字符串
learning_rate = 0.001      # 浮点数(AI 训练的关键参数)
batch_size = 32            # 整数
is_training = True         # 布尔值

# 可以把变量的值赋给另一个变量
lr = learning_rate          # lr 现在也是 0.001

# 变量可以重新赋值(值可以变)
learning_rate = 0.0001     # 现在变成 0.0001 了

# 同时赋值多个变量
x, y, z = 1, 2, 3

print(model_name)       # GPT-4o
print(learning_rate)    # 0.0001
print(x, y, z)          # 1 2 3
💡

命名规范:snake_case

Python 变量名习惯用小写字母加下划线,如 learning_ratebatch_size。这叫 snake_case(蛇形命名法)。避免用 lr 这类缩写(除非在 AI 领域是公认约定,如 lr 表示 learning rate)。

基本数据类型

Python 有 4 种基本数据类型。type() 函数可以查看任何值的类型。

① int —— 整数

没有小数点的数字。在 AI 中常用于:样本数量、训练轮次(epoch)、批次大小(batch size)、层数等。

PYTHON · int 整数
epochs = 100         # 训练 100 轮
num_samples = 50000  # 5 万个训练样本
layers = 12          # 神经网络 12 层

print(type(epochs))   # <class 'int'>
print(epochs ** 2)    # 10000(** 是幂运算)

# 整数支持任意大小(Python 的优势)
big_num = 10 ** 100   # 谷歌 = 10^100,Python 能算

② float —— 浮点数(小数)

带小数点的数字。在 AI 中最常用:学习率、损失值(loss)、准确率、模型权重等,几乎所有 AI 的计算结果都是 float。

PYTHON · float 浮点数
learning_rate = 0.001    # 学习率
loss = 2.345             # 损失值
accuracy = 0.9876       # 准确率 98.76%

# 科学计数法(AI 中常见的极小值)
weight = 1.5e-4          # 等于 0.00015
epsilon = 1e-8           # 极小值,防止除以零

print(type(loss))        # <class 'float'>
print(round(accuracy, 2)) # 0.99(保留2位小数)

# 注意浮点数精度问题(计算机通病)
print(0.1 + 0.2)          # 0.30000000000000004(不是精确的 0.3!)
⚠️

浮点数精度陷阱

计算机用二进制存储小数,某些十进制小数(如 0.1)无法精确表示,会有微小误差。在 AI 中通常不影响结果,但做精确比较时要用 abs(a - b) < 1e-9 而不是 a == b

③ str —— 字符串(文本)

文本类型,用单引号或双引号包裹。在 AI 中用于:提示词(Prompt)、模型名称、文本数据、API 响应等。大语言模型的输入输出全是字符串。

PYTHON · str 字符串
# 创建字符串
prompt = "请用中文回答以下问题"
model = 'claude-sonnet-4-6'  # 单双引号都行

# 多行字符串(用三引号)
system_prompt = """
你是一个专业的 AI 助手。
请用简洁清晰的语言回答问题。
"""

# f-string:最常用的字符串格式化方式
user_input = "什么是机器学习"
full_prompt = f"用户问题:{user_input}\n请简单回答:"

# 字符串拼接
text = "Hello" + " " + "World"   # Hello World

# 字符串长度
print(len(prompt))       # 10(字符数)

# 字符串方法
print(prompt.upper())    # 全大写(英文)
print(model.split('-'))  # ['claude', 'sonnet', '4', '6']
print("hello".replace("hello", "hi"))  # hi

# 检查子串是否存在
print("claude" in model)   # True

④ bool —— 布尔值(真/假)

只有两个值:True(真)和 False(假)。在 AI 中用于:控制训练状态(是否训练中)、条件判断、模型输出的分类结果(是/否)。

PYTHON · bool 布尔值
is_training = True
use_gpu = False
early_stop = True

# 比较运算返回布尔值
print(5 > 3)           # True
print(0.001 == 0.01)  # False
print(10 != 20)         # True(不等于)

# 逻辑运算
print(True and False)  # False(两个都要 True)
print(True or False)   # True(一个 True 就行)
print(not True)         # False(取反)

# 在 AI 中:检查是否使用 GPU 训练
import torch
gpu_available = torch.cuda.is_available()  # True 或 False
print(f"GPU 可用:{gpu_available}")

类型转换

在 AI 数据处理中,经常需要在类型之间转换,比如把读取的字符串数字转为真正的数字类型。

PYTHON · 类型转换
# int() - 转为整数
print(int("42"))      # 42(字符串 → 整数)
print(int(3.9))      # 3(浮点数 → 整数,直接截断,不四舍五入)
print(int(True))     # 1(True = 1,False = 0)

# float() - 转为浮点数
print(float("3.14")) # 3.14
print(float(5))      # 5.0

# str() - 转为字符串
print(str(100))      # "100"
print(str(0.001))    # "0.001"

# bool() - 转为布尔值
# 规则:0、空字符串""、None 是 False,其他是 True
print(bool(0))       # False
print(bool(1))       # True
print(bool(""))      # False(空字符串)
print(bool("hello")) # True

# 实际应用:读取 CSV 文件时,数字可能被读成字符串
raw_value = "0.95"              # 从文件读出来的是字符串
accuracy = float(raw_value)     # 必须转为 float 才能计算
print(accuracy * 100, "%")      # 95.0 %

运算符

数学运算符

运算符含义示例结果
+加法5 + 38
-减法5 - 32
*乘法5 * 315
/除法(结果是 float)7 / 23.5
//整除(向下取整)7 // 23
%取余(模运算)7 % 21
**幂运算2 ** 101024
PYTHON · AI 场景中的运算
# 计算模型准确率
correct = 892
total = 1000
accuracy = correct / total  # 0.892

# 梯度下降:更新参数
weight = 0.5
gradient = 0.1
lr = 0.01
weight = weight - lr * gradient  # 0.499

# 计算 step 数:1000个样本,batch_size=32
n_samples = 1000
batch_size = 32
steps_per_epoch = n_samples // batch_size   # 31 步(整除)
remainder = n_samples % batch_size          # 8 个剩余样本

# 模运算常见用途:每隔 N 步打印日志
for step in range(100):
    if step % 10 == 0:  # 每 10 步
        print(f"Step {step}")

# 复合赋值(常用简写)
loss = 2.0
loss -= 0.1   # 等于 loss = loss - 0.1 → 1.9
loss *= 0.9   # 等于 loss = loss * 0.9 → 1.71
🤖

AI 中最常用的运算

在 AI 训练中,你会反复看到 weight = weight - lr * gradient(梯度下降更新参数)和 loss / n_samples(计算平均损失)。这两个操作是神经网络学习的核心,背后就是这些基本运算。

None —— 空值

None 是 Python 中表示"什么都没有"的特殊值,相当于其他语言的 null。在 AI 中常用于初始化变量("还没有值")或函数没有返回值时的默认结果。

PYTHON · None 的使用
# 初始化(还没有模型)
model = None
best_loss = None

# 检查是否为 None
if model is None:
    print("模型还未加载")

# 函数没有 return 时默认返回 None
def train_one_step():
    print("训练中...")
    # 没有 return

result = train_one_step()  # 训练中...
print(result)               # None