103.14"hi" 都能赋给同一个变量名,但 type(10)type(3.14) 并不相同。

日常最常见的是 int、float、str、list 这类。int 跟 float 一起运算时常常会自动变成 float,字符串要跟数字拼接就得自己转,float 转成 int 还会截掉小数部分。

常用数据类型一览

类型说明示例
int整数10-3
float浮点数3.141.5e2
str字符串"hello"
bool布尔TrueFalse
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 输出。走通这一遍,就能体会输入先是文本、要算数必须先转换。