Python第三节基本数据类型详解与使用指南
精通前端vue、react全家桶,以及微信小程序、钉钉支付宝小程序、uniapp,目前在学习python,欢迎各位新老朋友留言私聊
Python
是一种动态类型语言,拥有丰富的数据类型系统。了解这些数据类型及其特性对编写高效、正确的代码至关重要。
1. 数字类型 (Numeric Types)
整数 (int
)
# 整数表示x = 10 # 十进制y = 0b1010 # 二进制 (10)z = 0o12 # 八进制 (10)w = 0xA # 十六进制 (10)# 大整数支持(无长度限制)big_num = 123456789012345678901234567890# 注意事项:
# 1. 整数除法使用 // 运算符
result = 7 // 2 # 结果为 3
# 2. 幂运算使用 **
power = 2 ** 3 # 8
浮点数 (float
)
# 浮点数表示
f1 = 3.14
f2 = 2.0
f3 = 4e5 # 科学计数法 400000.0# 注意事项:
# 1. 浮点数精度问题(所有语言通用)
print(0.1 + 0.2) # 0.30000000000000004
# 2. 需要高精度计算时使用 decimal 模块
from decimal import Decimal
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b) # 0.3
复数 (complex
)
# 复数表示
c1 = 3 + 4j
c2 = complex(2, -5) # 2-5j# 访问实部和虚部
print(c1.real) # 3.0
print(c1.imag) # 4.0
2. 布尔类型 (bool
)
# 布尔值
t = True
f = False# 注意事项:
# 1. 布尔值是整数的子类(True=1, False=0)
print(True + 1) # 2
# 2. 所有对象在布尔上下文中都有真值
# 假值:False, 0, 0.0, "", [], (), {}, None
3. 字符串 (str
)
# 字符串创建
s1 = '单引号'
s2 = "双引号"
s3 = '''多行
字符串'''
s4 = """也是多行
字符串"""# 字符串操作
name = "Alice"
greeting = f"Hello, {name}!" # f-string (Python 3.6+)
length = len(name) # 获取长度
sub = name[1:4] # 切片 'lic'# 注意事项:
# 1. 字符串是不可变对象
# name[0] = 'B' # 会报错
# 2. 原始字符串(忽略转义)
path = r"C:\Users\Name" # 反斜杠不会被转义
4. 列表 (list
)
# 列表创建
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True]# 列表操作
numbers.append(6) # 添加元素
numbers.insert(0, 0) # 插入元素
last = numbers.pop() # 移除并返回最后一个元素
sublist = numbers[1:4] # 切片 [2, 3, 4]# 列表推导式
squares = [x**2 for x in range(10)]# 注意事项:
# 1. 列表是可变的
# 2. 浅拷贝与深拷贝
list1 = [1, 2, [3, 4]]
list2 = list1.copy() # 浅拷贝
list1[2][0] = 99 # 会影响list2
5. 元组 (tuple
)
# 元组创建
point = (10, 20)
single = (5,) # 单个元素的元组需要逗号
empty = () # 空元组# 元组操作
x, y = point # 元组解包
first = point[0] # 访问元素# 注意事项:
# 1. 元组是不可变的
# point[0] = 5 # 会报错
# 2. 元组比列表更轻量,适合存储不变数据
6. 字典 (dict
)
# 字典创建
person = {"name": "Alice", "age": 30, "city": "New York"}
person2 = dict(name="Bob", age=25)# 字典操作
person["email"] = "alice@example.com" # 添加/更新
age = person.get("age") # 安全获取
keys = person.keys() # 获取所有键
values = person.values() # 获取所有值# 字典推导式
squares = {x: x**2 for x in range(5)}# 注意事项:
# 1. 字典键必须是不可变类型(字符串、数字、元组)
# 2. Python 3.7+ 中字典保持插入顺序
7. 集合 (set
)
# 集合创建
fruits = {"apple", "banana", "cherry"}
numbers = set([1, 2, 3, 4, 5])# 集合操作
fruits.add("orange") # 添加元素
fruits.remove("banana") # 移除元素
union = fruits | numbers # 并集
intersection = fruits & numbers # 交集# 集合推导式
even_squares = {x**2 for x in range(10) if x**2 % 2 == 0}# 注意事项:
# 1. 集合中的元素必须是不可变的
# 2. 集合不保持顺序
8. 特殊类型
NoneType
# None 表示空值或无值
value = None# 注意事项:
# 1. None 是单例对象,所有 None 值都是同一个对象
# 2. 常用于初始化变量或作为函数默认返回值
字节 (bytes
) 和字节数组 (bytearray
)
# 字节(不可变)
b = b"hello"
# 字节数组(可变)
ba = bytearray(b"hello")
ba[0] = 104 # 可以修改# 注意事项:
# 1. 用于处理二进制数据
# 2. 与字符串转换需要指定编码
s = b.decode('utf-8')
b2 = s.encode('utf-8')
数据类型检查与转换
# 类型检查
x = 10
print(type(x)) # <class 'int'>
print(isinstance(x, int)) # True# 类型转换
num_str = "123"
num_int = int(num_str) # 转换为整数
num_float = float(num_str) # 转换为浮点数
str_num = str(123) # 转换为字符串
list_range = list(range(5)) # 转换为列表
注意事项总结
可变与不可变对象:
可变:列表、字典、集合、字节数组
不可变:数字、字符串、元组、冻结集合(frozenset)、字节
赋值与拷贝:
- 赋值是引用传递(多个变量指向同一对象)
- 浅拷贝创建新对象,但嵌套对象仍共享
- 深拷贝完全独立(使用
copy.deepcopy()
)
比较操作:
==
比较值是否相等
is
比较是否是同一对象
性能考虑:
- 列表适合顺序访问和修改
- 元组更轻量,适合不变数据
- 集合和字典的查找操作是O(1)复杂度
类型提示(Python 3.5+):
def greet(name: str) -> str:return f"Hello, {name}"