10、3.14、"hi" 都能赋给同一个变量名,但 type(10) 和 type(3.14) 并不相同。
日常最常见的是 int、float、str、list 这类。int 跟 float 一起运算时常常会自动变成 float,字符串要跟数字拼接就得自己转,float 转成 int 还会截掉小数部分。
常用数据类型一览
| 类型 | 说明 | 示例 |
|---|---|---|
int | 整数 | 10、-3 |
float | 浮点数 | 3.14、1.5e2 |
str | 字符串 | "hello" |
bool | 布尔 | True、False |
list | 列表,可修改 | [1, 2, 3] |
tuple | 元组,不可修改 | (1, 2, 3) |
dict | 字典(键值对) | {'k': 'v'} |
set | 集合,去重无序 | {1, 2, 3} |
NoneType | 空值 | None |
用 type() 看类型
拿不准某个值是什么类型时,交给 type() 打印即可:
print(type(10)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("hi")) # <class 'str'>
print(type(True)) # <class 'bool'>
print(type([1, 2])) # <class 'list'>
print(type(None)) # <class 'NoneType'>隐式类型转换
int 和 float 放在同一表达式里运算时,Python 语言会自动把 int 提升成 float,免得整数运算把小数精度丢掉:
x = 10 # int
y = 2.5 # float
print(x + y) # 12.5,结果是 float
print(type(x + y)) # <class 'float'>显式类型转换
需要自己指定目标类型时,用 int()、float()、str()、bool() 这类构造函数做显式转换:
print(int(3.9)) # 3,直接截断小数,不四舍五入
print(int("42")) # 42,字符串转整数
print(float(2)) # 2.0
print(str(123)) # '123'
print(bool(0)) # False
print(bool("")) # False(空字符串为假)
print(bool("hi")) # True(非空为真)转换时要注意什么
- float 转 int 会截断小数:int(3.9) 得到 3,不是 4。
- 字符串转数字失败会抛异常:int("abc") 触发 ValueError。
- int 转 str 得到的是文字,不是继续当数字算:str(1) + "2" 的结果是 "12",而 1 + "2" 会报 TypeError。
字符串与数字混用
把数字直接拼进字符串会触发 TypeError,正确做法是先 str(),或者交给 print 用逗号分隔多个参数自行拼接:
# 下面这句会报错:TypeError,不能 int 直接加 str
# print("总数是 " + 10)
# 正确做法:先转成字符串
print("总数是 " + str(10)) # 总数是 10
print("总数是", 10) # 用逗号也 OK试着算一遍
写一个小程序:用 input 读入一个数字(记住它返回的是字符串),转成 float 后再乘以 2 输出。走通这一遍,就能体会输入先是文本、要算数必须先转换。