Python语言基础知识详解:数据类型及运算
Python语言基础知识详解:数据类型及运算
一、Python的数据类型体系
Python是强类型动态语言,所有数据均以对象形式存在。数据类型分为 不可变类型(值不可修改)和 可变类型(值可修改)。
分类 | 数据类型 | 示例 | 特性 |
---|---|---|---|
不可变类型 | int , float , bool , str , tuple , frozenset , bytes | 10 , 3.14 , "hello" , (1,2) | 创建后不可修改,操作生成新对象 |
可变类型 | list , dict , set , bytearray | [1,2] , {"a":1} , {1,2} | 支持原地修改,内存地址不变 |
二、基础数据类型详解
1. 数值类型(Numeric Types)
-
整型(
int
)
支持任意大整数(无溢出),可表示不同进制:a = 100 # 十进制 b = 0b1101 # 二进制(13) c = 0o755 # 八进制(493) d = 0x1F # 十六进制(31)
-
浮点型(
float
)
支持科学计数法,存在精度问题(需注意计算误差):f1 = 3.1415 f2 = 2e3 # 2000.0 f3 = 0.1 + 0.2 # 0.30000000000000004(精度问题)
-
布尔型(
bool
)
继承自int
,True
为1,False
为0:is_valid = True print(int(is_valid)) # 输出 1
-
复数(
complex
)
用于科学计算:c = 3 + 4j print(c.real) # 3.0 print(c.imag) # 4.0
2. 字符串(str
)
-
定义与操作
s1 = 'Hello' # 单引号 s2 = "World" # 双引号 s3 = '''多行 字符串''' # 三引号(保留换行) s4 = f"{s1} {s2}" # f-string(Python 3.6+)# 常用操作 print(s1[1]) # 'e'(索引) print(s1 + s2) # 'HelloWorld'(拼接) print(s1 * 3) # 'HelloHelloHello'(重复)
-
字符串方法
s = " Python " s.strip() # "Python"(去空格) s.upper() # " PYTHON "(转大写) "py" in s.lower() # True(成员检测) s.split('t') # [' Py', 'hon '](分割)
3. 序列类型(Sequence Types)
-
列表(
list
)
有序、可变,支持混合类型:lst = [1, "a", [2,3]] lst.append(4) # [1, "a", [2,3], 4] lst[1] = "b" # 修改元素
-
元组(
tuple
)
有序、不可变,适合固定数据:t = (1, "a", [2,3]) # t[1] = "b" # 错误!元组不可修改 t[2].append(4) # 合法(内部列表可变)
4. 映射类型(dict
)
键值对集合,键必须为不可变类型:
d = {"name": "Alice", "age": 20}
d["age"] = 21 # 修改值
d["city"] = "NY" # 新增键值对
keys = d.keys() # 获取所有键(视图对象)
5. 集合类型(set
, frozenset
)
-
set
:无序、元素唯一、可变s = {1, 2, 3} s.add(4) # {1,2,3,4} s.remove(1) # {2,3,4}
-
frozenset
:不可变集合fs = frozenset({1,2,3})
6. 其他类型
-
NoneType
:表示空值x = None # 常用于初始化变量
-
二进制类型:
b = b"hello" # bytes(不可变) ba = bytearray(b) # bytearray(可变)
三、运算符详解
1. 算术运算符
运算符 | 描述 | 示例 |
---|---|---|
+ | 加 | 3 + 2 → 5 |
- | 减 | 5 - 3 → 2 |
* | 乘 | 2 * 3 → 6 |
/ | 浮点除 | 7 / 2 → 3.5 |
// | 整数除 | 7 // 2 → 3 |
% | 取模 | 7 % 2 → 1 |
** | 幂运算 | 2 ** 3 → 8 |
2. 比较运算符
返回布尔值(True
/False
):
a, b = 5, 3
print(a > b) # True
print(a == b) # False
print(a != b) # True
3. 逻辑运算符
运算符 | 描述 | 示例 |
---|---|---|
and | 逻辑与 | True and False → False |
or | 逻辑或 | True or False → True |
not | 逻辑非 | not True → False |
4. 位运算符
处理整数的二进制形式:
a = 0b1010 # 10
b = 0b1100 # 12
print(bin(a & b)) # 0b1000(按位与)
print(bin(a | b)) # 0b1110(按位或)
print(bin(a ^ b)) # 0b0110(按位异或)
5. 成员运算符
检查元素是否在容器中:
lst = [1, 2, 3]
print(2 in lst) # True
print(4 not in lst) # True
6. 身份运算符
比较对象的内存地址(is
vs ==
):
a = [1,2]
b = [1,2]
c = aprint(a == b) # True(值相等)
print(a is b) # False(不同对象)
print(a is c) # True(同一对象)
四、类型转换与内存管理
1. 显式类型转换
int("100") # 100(字符串→整数)
float(10) # 10.0(整数→浮点)
str(3.14) # "3.14"
list("abc") # ['a', 'b', 'c']
tuple([1,2,3]) # (1,2,3)
2. 内存管理机制
- 引用计数:自动回收无引用对象。
- 深浅拷贝:
import copy lst1 = [1, [2,3]] lst2 = copy.copy(lst1) # 浅拷贝(内部列表共享) lst3 = copy.deepcopy(lst1) # 深拷贝(完全独立)
五、常见问题与解决方案
-
浮点数精度问题
# 使用decimal模块精确计算 from decimal import Decimal print(Decimal('0.1') + Decimal('0.2')) # 0.3
-
可变类型作为函数默认参数
# 错误示例:默认参数在函数定义时创建一次 def append_to(item, lst=[]):lst.append(item)return lst# 正确做法:使用None作为默认值 def append_to(item, lst=None):if lst is None:lst = []lst.append(item)return lst
-
is
与==
的误用a = 256 b = 256 print(a is b) # True(小整数池优化)c = 257 d = 257 print(c is d) # False(超出缓存范围)
六、总结
核心概念 | 关键要点 |
---|---|
数据类型分类 | 不可变类型(安全但效率低) vs 可变类型(高效但需注意副作用) |
运算符优先级 | 括号 > 算术 > 比较 > 逻辑 > 赋值 |
类型转换 | 显式转换确保数据兼容性,注意信息丢失风险 |
内存管理 | 理解深浅拷贝区别,避免共享可变对象导致的意外修改 |
常见陷阱 | 浮点精度、默认参数陷阱、is 与== 的区别 |
掌握数据类型与运算是构建复杂程序的基石。通过合理选择数据类型和运算符,可以显著提升代码性能和可维护性。