《Python AI 应用开发入门》第 2.1 节。
创建和更新变量,理解名字与值的绑定,并认识常用基本数据类型。
本节目标
学完本节后,你应当能够:
- 1. 说明 Python 变量在首次赋值时如何创建。
- 2. 创建、读取、更新变量,并区分变量名与它指向的值。
- 4. 区分
int、float、bool、str 与 None。 - 6. 使用
int()、float()、str() 和 bool() 完成基本类型转换。 - 7. 知道变量有可见范围,完整作用域规则将在函数章节学习。
1. 变量是数据的名字
变量可以理解为程序给一份数据贴上的标签:
user_name = "小林"message_count = 3temperature = 0.7is_logged_in = Truelast_error = None
变量在首次赋值时创建
Python 不需要使用 var、let 或其他关键字提前声明变量。程序第一次执行赋值语句时,就会在当前作用域创建这个变量名:
model_name = "demo-model"
执行过程是:
- 1. 等号右边先产生字符串值
"demo-model"。
= 在这里表示赋值,不是数学中的“永远相等”。
变量也可以由表达式的计算结果创建:
weekly_hours = 6weeks = 4total_hours = weekly_hours * weeks
第三行先读取前两个变量并完成乘法,再创建 total_hours,让它指向结果 24。
如果在赋值发生前读取变量,Python 找不到这个名字,会触发 NameError:
# print(selected_model) # NameError: name 'selected_model' is not definedselected_model = "demo-model"
关键不是“代码文件里是否写过这个名字”,而是程序执行到当前位置时,创建这个名字的赋值语句是否已经运行。
读取和更新变量
读取变量时直接写它的名字:
user_name = "小林"print(user_name)
更新变量会让名字指向新值:
message_count = 3message_count = 4print(message_count)
输出是:
4
程序按从上到下的顺序执行,因此最后一次赋值决定当前值。
更新其实是重新绑定
更新变量时,Python 会让原来的名字改为指向新值。它不会自动修改其他已经创建的变量:
user_name = "小林"display_name = user_nameuser_name = "小杜"print(user_name)print(display_name)
输出是:
小杜小林
执行 display_name = user_name 时,两个名字都指向字符串 "小林"。后面的 user_name = "小杜" 只重新绑定 user_name,不会让 display_name 跟着变化。
初学阶段可以先记住:
- • 读取尚未创建的名字会触发
NameError。
2. 变量命名规范
Python 变量名可以包含英文字母、数字和下划线,但不能以数字开头,也不能使用 Python 关键字。
推荐使用小写加下划线的 snake_case 风格:
user_question = "什么是变量?"max_tokens = 500has_context = False
避免含义模糊或无效的名字:
x = "什么是变量?" # 含义不清a1 = 500 # 无法看出用途用户问题 = "什么是变量?" # Python 支持,但团队协作中通常不推荐
变量名应该说明“保存的是什么”,而不是只描述类型:
message_count = 5 # 比 number 清楚selected_model = "fast" # 比 text 清楚
下面这些写法不合法:
# 2nd_message = "你好" # 不能以数字开头# user-name = "小林" # 连字符会被当成减法# class = "beginner" # class 是 Python 关键字
3. 注释帮助解释意图
井号 # 后面的内容是单行注释,不会被 Python 执行:
# 最多保留 20 条消息,避免终端输出过长max_history = 20
行尾也可以写注释:
temperature = 0.2 # 较低的值让示例回答更稳定
好注释解释“为什么”,坏注释只是重复代码:
# 把消息数量设置为 0message_count = 0
这条注释没有提供额外信息。更有用的写法是:
# 新会话还没有历史消息message_count = 0
4. 五种基础数据
整数 int
没有小数部分的数字:
message_count = 12max_retries = 3
浮点数 float
带小数的数据:
temperature = 0.7request_cost = 0.015
浮点数适合表示比例、测量值和近似数,不适合要求绝对精确的小数金额计算。当前章节只需要掌握基本使用。
布尔值 bool
只有 True 和 False 两个值,首字母必须大写:
is_streaming = Truehas_error = False
布尔值常用于记录“是否满足某个条件”。
字符串 str
用引号包围的文本:
model_name = "demo-model"system_prompt = '你是一名耐心的 Python 助教。'
单引号和双引号都可以,团队中保持一致即可。数字加引号后也会变成字符串:
message_count = 3message_count_text = "3"
这两个值看起来相似,但类型和可执行的操作不同。
空值 None
None 表示“目前没有值”或“尚未得到结果”:
last_answer = None
它不是空字符串 "",也不是数字 0。这些值表达的含义不同。
5. 使用 type() 检查类型
message_count = 3temperature = 0.7is_streaming = Truemodel_name = "demo-model"last_answer = Noneprint(type(message_count))print(type(temperature))print(type(is_streaming))print(type(model_name))print(type(last_answer))
会看到类似:
<class 'int'><class 'float'><class 'bool'><class 'str'><class 'NoneType'>
type() 很适合排查“看起来一样,但操作结果不同”的问题。
6. 同一变量可以指向不同类型
Python 允许:
message_count = 3message_count = "三"
但这通常会让代码难以理解。除非业务含义确实改变,否则尽量让同一变量始终保存同类数据。
下面的错误就来自类型变化:
message_count = 3message_count = "3"print(message_count + 1)
字符串 "3" 不能直接和整数 1 相加,会触发 TypeError。
7. 基本类型转换
转换函数会根据已有值创建另一种类型的值:
count_text = "12"message_count = int(count_text)print(message_count + 1)
常见转换:
int("12") # 12float("0.7") # 0.7str(12) # "12"bool(1) # Truebool(0) # False
不是所有内容都能转换:
# int("十二")# int("3.5")
这两行都会触发 ValueError。int("3.5") 不能直接解析带小数点的字符串;如果业务允许,可以先使用 float("3.5")。
不要为了消除报错而随意转换类型。先明确业务需要的是数字还是文本,再转换。
8. input() 得到的总是字符串
age = input("请输入年龄:")print(type(age))
即使输入 18,类型仍是 str。需要数字计算时必须转换:
weekly_hours_text = input("每周计划学习多少小时?")weekly_hours = int(weekly_hours_text)total_hours = weekly_hours * 4print(total_hours)
当前还没学习异常处理,因此先按提示输入有效整数。第 3 章会学习如何优雅处理无效输入。
9. 先知道变量有作用范围
作用域(scope)表示一个变量名可以在哪些位置被读取。完整作用域规则依赖函数、参数和返回值,将在“函数基础”和“函数进阶”中系统学习。
当前先记住三点:
- 2. 函数会建立自己的局部作用域,但现在还不需要提前学习具体规则。
- 3. 不要使用
print、type、str 等 Python 内置名称作为变量名,否则会遮蔽原来的功能。
例如,下面使用 data_type,而不使用内置函数名 type:
data_type = "整数"print(type(data_type))
等学会定义和调用函数后,再继续学习 Local、Enclosing、Global、Built-in,也就是 LEGB 查找顺序。
动手练习
练习 1:学习者资料卡
创建 profile_card.py,保存并输出:
要求至少使用 str、int 和 bool 三种类型,并用 type() 检查它们。
练习 2:观察类型错误
运行下面代码并记录报错:
message_count = "5"message_count = message_count + 1
回答:
练习 3:四周学习计划
让用户输入每周学习小时数,转换为整数,计算四周总学习时长并输出。
验收示例:
每周计划学习多少小时?6未来 4 周计划学习 24 小时。
随堂小测
- 2.
message_count 和 "message_count" 有什么区别? - 5.
int("8") 的结果和值类型分别是什么? - 6. 为什么不推荐让同一个变量一会儿保存整数、一会儿保存字符串?
- 8. 为什么不推荐把
type 或 str 用作变量名?
参考答案
- 6. 它会让代码含义不稳定,更容易产生类型错误,也更难阅读和维护。
- 8. 它们是 Python 内置名称。创建同名变量会遮蔽原来的函数,使后续调用产生错误。
本节完成检查
- • 我知道变量在首次赋值时创建,再次赋值会重新绑定名字。
- • 我知道变量有作用范围,完整规则将在函数章节学习。
- • 我没有使用
type、str 等内置名称作为变量名。