变量与数据类型
学习变量声明、数字、字符串、布尔等基础数据类型
变量与数据类型
变量是编程中最基础的概念——它就像一个带标签的盒子,用来存储数据。Python 不需要提前声明变量类型,直接赋值即可。
学完本章你将掌握: 变量命名规则、6 种核心数据类型、类型检查和转换。
一、变量是什么
python
name = "小明" # 把"小明"放进叫 name 的盒子里
age = 20 # 把 20 放进叫 age 的盒子里
score = 95.5 # 小数也可以
is_student = True # 真假值
print(f"姓名: {name}, 年龄: {age}, 分数: {score}")
💡 你知道吗:Python 的变量名只是一个"标签",指向内存中的实际数据。同一个值可以被多个变量名引用,修改一个不会影响另一个(对于不可变类型)。
二、变量命名规则
python
# ✅ 合法命名
user_name = "小明" # 字母 + 下划线(推荐)
_score = 100 # 下划线开头
score2 = 95 # 字母 + 数字
MAX_VALUE = 1000 # 全大写表示常量(约定)
_ = "临时变量" # 单下划线
# ❌ 非法命名
# 2name = "错误" # 不能数字开头
# my-name = "错误" # 不能用连字符
# class = "错误" # 不能使用关键字
# my name = "错误" # 不能有空格
Python 关键字(不能用作变量名)
这些词被 Python 保留,不能作为变量名:
python
# 查看所有关键字
import keyword
print(keyword.kwlist)
# ['False', 'None', 'True', 'and', 'as', 'assert', 'async',
# 'await', 'break', 'class', 'continue', 'def', 'del', 'elif',
# 'else', 'except', 'finally', 'for', 'from', 'global', 'if',
# 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or',
# 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
💡 命名建议:变量名要见名知意。
a = 18远不如age = 18清晰。好的命名让代码像文章一样易读。
三、数字类型
Python 有三种数字类型:
python
age = 25 # int(整数)—— 没有小数点
pi = 3.14159 # float(浮点数)—— 有小数点
big = 1_000_000 # 可以用下划线分隔,更易读
sci = 1.5e3 # 科学计数法 = 1500.0
# 类型检查
print(type(age)) # <class 'int'>
print(type(pi)) # <class 'float'>
print(isinstance(age, int)) # True
整数 vs 浮点数的精度问题:
python
# 整数运算精确
print(10 / 3) # 3.3333333333333335
# 浮点数有精度限制(所有语言都这样)
print(0.1 + 0.2) # 0.30000000000000004 (不是 0.3!)
print(0.1 + 0.2 == 0.3) # False!
# 解决办法:用 round()
print(round(0.1 + 0.2, 2)) # 0.3
⚠️ 常见陷阱:不要直接用
==比较浮点数!用round()或检查差值是否非常小。
四、字符串类型
字符串是文本数据,用引号包裹:
python
s1 = 'hello' # 单引号
s2 = "world" # 双引号(没区别)
s3 = '''多行
字符串''' # 三引号可跨行
s4 = "他说:\"你好\"" # 引号内嵌套引号要转义
# 字符串长度
print(len(s1)) # 5
print(len("你好")) # 2
# 字符串拼接
print("Hello " + "World") # Hello World
print("A" * 5) # AAAAA(重复)
五、布尔类型
只有两个值:True 和 False(首字母大写):
python
is_adult = True
is_student = False
# 比较运算产生布尔值
print(10 > 5) # True
print(10 == 5) # False
print("a" == "a") # True
# 布尔值可以参与数学运算
print(True + True) # 2(True = 1)
print(False + 1) # 1(False = 0)
# bool() 判断
print(bool(0)) # False
print(bool(42)) # True
print(bool("")) # False(空字符串)
print(bool("hello")) # True(非空字符串)
print(bool([])) # False(空列表)
print(bool([1,2])) # True(非空列表)
💡 你知道吗:Python 中,以下值被视为
False:0、0.0、""(空字符串)、[](空列表)、{}(空字典)、None。其他都是True。这叫真值测试。
六、None 类型
None 表示"什么都没有"、"空"、"不存在":
python
result = None
print(result) # None
print(type(None)) # <class 'NoneType'>
# 常用场景:函数没有 return 时返回 None
def do_something():
pass
print(do_something()) # None
# 检查是否为 None(用 is,不要用 ==)
if result is None:
print("没有结果")
七、类型检查与转换
python
# type() 查看类型
x = 42
print(type(x)) # <class 'int'>
x = "hello"
print(type(x)) # <class 'str'>
# 类型转换
print(int("42")) # 42(字符串转整数)
print(float("3.14")) # 3.14(字符串转浮点)
print(str(100)) # "100"(数字转字符串)
print(bool(1)) # True(数字转布尔)
# 转换失败的例子
# print(int("abc")) # ❌ ValueError: 无法转换
# print(int("3.14")) # ❌ 不能直接把小数格式的字符串转 int
print(int(float("3.14"))) # ✅ 先转 float,再转 int = 3
八、动态类型
Python 变量可以随时改变类型(动态类型语言):
python
x = 10 # x 是整数
print(type(x)) # <class 'int'>
x = "hello" # 现在 x 是字符串
print(type(x)) # <class 'str'>
x = [1, 2, 3] # 现在 x 是列表
print(type(x)) # <class 'list'>
💡 灵活但要小心:动态类型让代码简洁,但也容易写出 bug。一个好的习惯是:一个变量只用来存一种类型的数据。
小结
- 变量 = 数据的标签,
name = "小明"即可创建 - 基本类型:
int(整数)、float(浮点)、str(字符串)、bool(布尔)、None type()查类型,int()str()做转换- 浮点数有精度问题,不要直接用
==比较 - 变量命名用
snake_case,见名知意
小练习
- 创建变量存储你的姓名、年龄和城市,然后打印出来
- 验证
0.1 + 0.2 == 0.3是 True 还是 False? bool("")和bool([])分别返回什么?运行验证
💬 下一章预告:学完变量,下一章学习运算符——有了数据,我们需要对它进行计算和判断。