Python入门必修课:基本数据类型、进制转换与类型转换函数全解析
一、Python 的基本数据类型
Python是动态类型语言,变量不需要提前声明类型,赋值时自动推断。但这不代表类型不重要——恰恰相反,理解数据类型是写出健壮代码的第一步。
Python 核心基础数据类型(数字 + 布尔 + 字符串 + 空值)
| 类型 | 说明 | 示例 | 注意事项 |
|---|---|---|---|
int | 整数(任意大小,无精度损失,支持位运算) | 42,-3,0,0xFF,0b1010 | 可表示超大整数,//为向下取整 |
float | 浮点数 | 3.14,-0.001,2.0,1.2e5 | 存在精度问题(如0.1+0.2≠0.3) |
bool | 布尔值(逻辑真假) | True,False | bool是int的子类(True=1,False=0) |
str | 字符串 | "Hello",'Python',"""多行""" | 支持索引、切片、格式化 |
NoneType | 空值类型(表示"无"或"未定义") | None | 全局唯一单例,判断必须用is None |
代码示例:
# ============ 1. 整数 (int) ============ age = 25 big_num = 2 ** 100 # 超大整数 hex_num = 0xFF # 十六进制 → 255 bin_num = 0b1010 # 二进制 → 10 print(type(age)) # <class 'int'> print(big_num) # 1267650600228229401496703205376 print(hex_num) # 255 print(5 // 2) # 2(向下取整) print(-5 // 2) # -3(注意:向下取整,不是向零截断) # ============ 2. 浮点数 (float) ============ price = 99.9 pi = 3.14159 scientific = 1.2e5 # 科学计数法 → 120000.0 print(type(price)) # <class 'float'> print(0.1 + 0.2) # 0.30000000000000004(精度问题!) # ============ 3. 布尔值 (bool) ============ is_student = True is_graduated = False print(type(is_student)) # <class 'bool'> print(is_student + 3) # 4(True 当作 1 参与运算) print(int(True)) # 1 print(int(False)) # 0 # 常见假值(在if判断中会被视为False) print(bool(0)) # False print(bool(0.0)) # False print(bool("")) # False print(bool(None)) # False print(bool(" ")) # True(空格是字符,非空字符串) # ============ 4. 字符串 (str) ============ name = "Alice" greeting = 'Hello' multi_line = """第一行 第二行 第三行""" print(type(name)) # <class 'str'> # ============ 5. 空值类型 (NoneType) ============ result = None print(type(result)) # <class 'NoneType'> print(result is None) # True1.整数(int)
Python的整数与其他语言最大的不同是:没有长度限制(仅受内存约束),理论上可以无限大。
整数的内存模型
python
a = 42 b = 2 ** 1000 # 这是一个拥有302位数字的超大整数 print(b) # 107150860718626732094842504906000181056140481170553360744375... print(type(b)) # <class 'int'>
在C语言中,int超过范围会溢出;Python则自动扩容,代价是运算速度稍慢,但换来的是绝对的数值安全性。
整数的四种进制表示(int)
日常主要用十进制,但某些场景会用到其他进制:
dec = 255 bin_ = 0b11111111 # 二进制,前缀 0b oct_ = 0o377 # 八进制,前缀 0o hex_ = 0xFF # 十六进制,前缀 0x 四种写法全部相等 print(dec == bin_ == oct_ == hex_) # True
2. 浮点数(float)
Python的float基于IEEE 754双精度标准(即C语言的double),占用64位,有效精度约15~17位十进制数字。
浮点数的本质缺陷
0.1 + 0.2 ≠ 0.3——这是所有使用二进制浮点数的语言的通病,其根源在于计算机使用二进制(基数为2)来表示数字,而许多十进制小数无法用有限的二进制位精确表示。
Python的float类型基于IEEE 754双精度标准(即C语言的double),占用64位,有效精度约15~17位十进制数字。这已经能满足绝大多数科学计算和工程应用的需求,但在涉及精确小数运算时,必须警惕其固有的舍入误差。
让我们通过代码直观感受这个问题:
print(0.1 + 0.2) # 输出:0.30000000000000004 print(0.1 + 0.2 == 0.3) # 输出:False 更多令人惊讶的例子 print(0.3 - 0.2 == 0.1) # 输出:False print(1.1 + 2.2) # 输出:3.3000000000000003 print(0.7 + 0.1) # 输出:0.7999999999999999原因分析:十进制小数0.1在二进制中是一个无限循环小数(0.0001100110011...),就像1/3在十进制中是0.333...一样。计算机内存有限,只能存储其近似值。当进行连续运算时,这些微小的近似误差会累积,导致最终结果与预期产生微小偏差。
应对策略:
- 容忍微小误差:对于大多数科学计算,这种微小的误差(通常在10-15量级)是可以接受的。比较浮点数时,应使用容差比较而非直接相等:
abs(a - b) < 1e-9 - 理解浮点数的这一本质缺陷,是编写可靠数值计算程序的关键。它提醒我们:计算机的"精确"是相对的,选择合适的数据类型和比较方法,才能避免因舍入误差导致的隐蔽错误。
浮点数转整数的注意事项
python
print(int(3.9)) # 3 (向零截断,不是四舍五入) print(int(-3.9)) # -3 (向零截断) print(round(3.5)) # 4 (四舍五入)
3、布尔类型(bool)—— 并非只有True和False这么简单
bool是int的子类,True和False分别对应1和0。
布尔值的隐式转换
在条件判断(if、while、or)中,以下值会被视为假(False):
| 分类 | 具体值 |
|---|---|
| 数值零 | 0,0.0,0j |
| 空序列/集合 | "",[],(),{} |
None | None |
其他所有值均为True
python
if []: # False if "": # False if " ": # True(空格是字符)
4. 字符串类型(str)
用单引号、双引号或三引号括起来的文本,不可变序列。
python
name = "Alice" greet = 'Hello' multi_line = """第一行 第二行"""
字符串的创建与引号选择
python
s1 = '单引号' s2 = "双引号" # 可以包含单引号,如 "it's" s3 = '''三单引号''' # 可换行 s4 = """三双引号""" # 同样可换行
字符串与数字的相互转换陷阱
python
num_str = "123" print(int(num_str)) # 123 (OK) print(float(num_str)) # 123.0 (OK) invalid = "12.3" # print(int(invalid)) # ValueError!不能直接转int,必须先转float print(int(float(invalid))) # 12 (先转float再转int)
5、NoneType(None)—— 代表"空无一物"
None是NoneType类型的唯一实例,在Python中表示"没有值"或"空"。
常见使用场景
python
# 1. 变量初始化(占位) result = None
二、Python 整数进制转换
Python 对整数提供了便捷的进制表示法和转换函数,这在网络编程、颜色处理、位运算等场景非常常用。
1. 整数字面量的进制表示
在代码中直接写不同进制的整数:
python
dec = 42 # 十进制(默认) bin_num = 0b101010 # 二进制(前缀 0b/0B) oct_num = 0o52 # 八进制(前缀 0o/0O) hex_num = 0x2A # 十六进制(前缀 0x/0X) print(dec, bin_num, oct_num, hex_num) # 全部输出 42
2. 进制转换函数(转为字符串)
| 函数 | 作用 | 示例 |
|---|---|---|
bin(x) | 整数 → 二进制字符串(以'0b'开头) | bin(42)→'0b101010' |
oct(x) | 整数 → 八进制字符串(以'0o'开头) | oct(42)→'0o52' |
hex(x) | 整数 → 十六进制字符串(以'0x'开头) | hex(42)→'0x2a' |
python
num = 255 print(bin(num)) # 0b11111111 print(oct(num)) # 0o377 print(hex(num)) # 0xff
3. 将其他进制字符串转回整数
使用int(string, base),其中base表示原字符串的进制(2, 8, 16):
python
print(int('101010', 2)) # 42 print(int('52', 8)) # 42 print(int('2a', 16)) # 42 # 也支持带前缀的写法 print(int('0b101010', 2)) # 42三、Python 数据类型转换函数
Python 提供了一系列内置函数,用于在不同数据类型之间灵活转换(注意:转换可能导致精度丢失或报错)。
常用转换函数一览表
| 函数 | 作用 | 示例 |
|---|---|---|
int(x) | 转为整数 | int(3.9)→3(截断);int("42")→42 |
float(x) | 转为浮点数 | float(3)→3.0;float("3.14")→3.14 |
str(x) | 转为字符串 | str(123)→"123" |
bool(x) | 转为布尔值 | 空/零 →False,非空非零 →True |
1. 字符串转数字时,内容必须合法
python
int("123") # OK int("12.3") # ValueError!小数点不是整数格式 float("12.3") # OK2. 浮点数转整数是截断(不是四舍五入)
python
int(3.9) # 3(向零截断) int(-3.9) # -3(向零截断)
3. 布尔值与其他类型互转
python
bool(0) # False bool(42) # True bool("") # False bool("abc") # True int(True) # 1四、总结
| 知识点 | 核心要点 |
|---|---|
| 基本数据类型 | 数字(int/float)、布尔(bool)、字符串(str)、空字符(NoneType) |
| 整数进制转换 | bin()/oct()/hex()转为带前缀字符串;int(s, base)转回整数; |
| 类型转换函数 | int()/float()/str()/bool(),注意合法性和精度问题 |
掌握好数据类型,就为后续的函数、类、文件操作等打下了坚实基础。
