PYTHON BASICS · CHAPTER 01
变量、类型与字符串
理解名字如何绑定到值、类型如何决定操作,并能追踪赋值、转换、字符串与 f-string 的执行过程。
程序运行时会不断产生值。变量是我们给某个值起的名字,类型说明这个值允许参与哪些操作。等号不是数学命题,而是一条从右向左执行的指令:先计算右边,再让左边的名字指向结果。
1. 先区分值、变量名和赋值动作
10、3.14、"RAG" 和 True 都是值。score、price 和 model_name 是变量名。写 score = 10 时,Python 创建或取得整数值 10,再把名字 score 绑定到这个值。之后写 print(score),Python 会先沿着名字找到值,再把值交给 print。
变量名不是永久贴在值上的标签。同一个名字可以在后面重新绑定到新值,旧值如果不再被任何对象引用,会由 Python 回收。理解“名字指向值”比把变量想成固定类型的盒子更接近 Python 的实际行为。
变量必须先赋值再读取。读取一个从未绑定的名字会产生 NameError;这通常意味着名字拼错、执行顺序不对,或变量只在某个没有执行的分支里赋过值。
score = 10
print(score) # 先找到 score 指向的值,再输出 10
score = 12 # score 重新指向整数 12
print(score) # 12
# print(total) # 如果 total 从未赋值,会得到 NameError2. 赋值从右向左执行,右边可以使用旧值
执行 score = score + 1 时,Python 不会同时改变左右两边。它先读取右边旧的 score,计算 score + 1 得到新整数,再把左边的 score 重新绑定到新结果。
可以把一行赋值拆成两个阶段思考:temporary = 右侧表达式,然后 左侧变量 = temporary。以后遇到函数调用、列表索引或 API 响应的复杂赋值,也沿用这套顺序。
+= 是常用简写:score += 1 与 score = score + 1 在整数场景下结果相同。初学时先确保能解释完整写法,再使用简写。
score = 10
# 阶段 1:读取旧值 10,计算出 11
# 阶段 2:让 score 指向 11
score = score + 1
score += 2
print(score) # 133. 类型决定操作的含义,而变量名不决定类型
int 表示整数,float 表示小数,str 表示文本,bool 表示 True 或 False,None 表示“目前没有值”。type(value) 可以在调试时告诉你实际类型。
操作由参与运算的值决定。10 + 2 是整数加法,"10" + "2" 是字符串拼接。Python 不会因为变量名叫 count 就自动把字符串转成数字。
Python 变量可以重新绑定到不同类型,但频繁改变同一变量的含义会让代码难以理解。hours 一会儿是字符串、一会儿是整数时,使用 hours_text 和 hours 分开命名更清楚。
print(10 + 2) # 12
print("10" + "2") # 102
print(type(10)) # <class 'int'>
print(type(10.0)) # <class 'float'>
print(type("10")) # <class 'str'>
print(type(True)) # <class 'bool'>4. 表达式产生结果,语句推动程序向前执行
2 + 3、price * quantity 和 len(text) 都是表达式,因为它们会产生一个结果。赋值和 print(...) 是语句,它们让程序保存结果或产生可见效果。
复杂表达式遵循运算优先级,但不要靠记忆所有规则写难读代码。括号既能控制计算顺序,也能向读者说明意图。
调试时把复杂表达式拆成中间变量,不会降低代码质量。中间变量能让你逐个打印类型和值,快速确定哪一步开始出错。
input_tokens = 1200
output_tokens = 300
price_per_1k = 0.02
total_tokens = input_tokens + output_tokens
units = total_tokens / 1000
cost = units * price_per_1k
print(total_tokens) # 1500
print(cost) # 0.035. 类型转换是创建新值,不是修改原值
input()、文本文件和部分 JSON 字段读出来时可能是 str。要参与数值计算,需要显式调用 int() 或 float()。int("12") 会根据字符串内容创建整数 12,但原字符串仍然存在。
转换函数要求内容合法:int("12") 成功,int("12.5") 和 int("十二") 会产生 ValueError;float("12.5") 才能处理小数字符串。
str(value) 可以把数字等值转成文本,但构造可读输出时通常优先使用 f-string。bool(value) 的规则更特殊:空字符串、0 和 None 为 False,大多数非空值为 True。
hours_text = "12"
hours = int(hours_text)
weeks = 4
total = hours * weeks
print(hours_text, type(hours_text)) # 12 <class 'str'>
print(hours, type(hours)) # 12 <class 'int'>
print(total) # 486. 字符串是字符序列,转义符表示特殊字符
字符串可以使用单引号或双引号,开始和结束必须成对。字符串内部需要同类引号时,可以改用另一类外层引号,或使用反斜杠转义。
\n 表示换行,\t 表示制表符,\\ 表示一个反斜杠。这些通常是源代码里的两个字符,但运行后会被解释成一个特殊字符。len() 统计的是解释后的字符串长度。
三引号可保存多行文本,适合较长的 Prompt 或测试资料。缩进也会成为字符串内容,因此不要无意中把代码缩进带进 Prompt。
message = "第一行
第二行"
path = "docs\rag.md"
quote = '他说:"开始学习"'
print(message)
print(path)
print(quote)7. f-string 把值嵌入文本,并保持类型清晰
字符串前加 f 后,花括号中可以写变量或简单表达式。Python 会计算花括号里的内容,再把结果转换成文本嵌入字符串。
f-string 比使用 + 拼接更安全,因为数字不需要先手动 str()。格式说明符还能控制小数位,例如 {cost:.2f} 固定显示两位小数。
AI 开发中会频繁构造日志、Prompt、引用和调试信息。不要把不可信用户输入直接拼进系统指令;目前先掌握字符串构造,安全边界会在 Agent 章节专门处理。
model = "deepseek-v4-flash"
tokens = 1500
cost = 0.03
summary = f"模型 {model} 使用 {tokens} tokens,费用 {cost:.2f} 元。"
print(summary)错在哪里,怎么改
hours = "10"; total = hours * 3字符串乘 3 会重复文本,得到 101010,不是 30。
user-name = "小明"- 会被当成减号,不能用在普通变量名中。
print(total) 写在 total 赋值之前程序从上到下执行,此时名字 total 尚不存在。
int("12.5")int() 不能直接解析带小数点的字符串。
active = "False",然后 if active:非空字符串在条件中通常为 True,它不是布尔值 False。
f"费用 {cost 元"花括号没有闭合,Python 无法确定表达式在哪里结束。
先口述答案,再展开
01score = 8; score = score + 2 之后,score 是多少?+
10。右边先用旧值 8 计算出 10,再重新绑定。
02"12" 和 12 相同吗?+
不同。前者是 str,后者是 int;可用 int("12") 创建对应整数。
03执行 hours = int(hours_text) 后,hours_text 会变成整数吗?+
不会。int() 创建一个新整数并交给 hours,hours_text 仍指向原字符串。
04为什么 print("10" + "2") 输出 102?+
+ 的两边都是 str,因此执行字符串拼接,而不是数值加法。
05bool("False") 的结果为什么是 True?+
bool() 判断的是字符串是否为空。"False" 是非空字符串,因此为 True,与单词含义无关。
06{cost:.2f} 在 f-string 中表示什么?+
把 cost 格式化为保留两位小数的文本,不会改变 cost 变量本身的数值。
先预测,再运行验证
这些不是额外考试。先不看答案说出程序会怎样执行,再到右侧自由练习区验证。
- 1逐步口述 score = score + 1 的读取、计算和重新绑定。
- 2用 type() 检查 3、3.0、"3"、True 和 None。
- 3预测 "5" * 3 与 int("5") * 3 的不同结果。
- 4把一个总价表达式拆成三个可打印的中间变量。
- 5构造包含换行和双引号的字符串。
- 6用 f-string 输出模型名、Token 数和保留两位小数的费用。
从理解语法到独立解决
点击任一题,右侧实验台会切换到对应代码。
AI 老师
固定答疑区 · 不跟随章节变化