Python 核心数据类型与基础操作解析
Python 提供了丰富且强大的内置数据类型。根据数据是否允许在原地修改,可以将其划分为不可变类型(如数字、字符串、元组)和可变类型(如列表、字典、集合)。理解这些类型的特性及其操作方式是掌握 Python 编程的基础。
动态类型与变量绑定
Python 采用动态类型系统,变量无需显式声明类型。变量名本质上是对内存中对象的引用,只有在赋值操作发生时,变量才会被创建并绑定到具体的对象上。
# 基础数据类型
project_name = "DataPipeline" # 字符串
max_retries = 5 # 整数
is_active = True # 布尔值(bool 是 int 的子类,True 等价于 1,False 等价于 0)
# 复合数据结构
server_ports = [80, 443, 8080] # 列表(可变)
db_config = ("localhost", 5432) # 元组(不可变,单元素元组需加逗号,如 (5432,))
unique_tags = {"python", "backend"} # 集合(可变,空集合必须使用 set() 创建)
user_profile = {"id": 101, "role": "admin"} # 字典(可变)
raw_payload = bytes("ping", "utf-8") # 字节串(不可变)
def process_data(): # 函数对象
pass
字符串处理
字符串是不可变序列,支持正向(从 0 开始)和反向(从 -1 开始)索引。可以通过切片操作提取子串,使用 + 进行拼接,或使用 * 进行重复。
索引、切片与转义
反斜杠 \ 用于转义特殊字符。若需保留反斜杠的字面意义(如正则表达式或 Windows 路径),可在字符串前添加 r 前缀声明为原始字符串。
file_path = "C:\\Users\\Admin\\data.txt"
raw_path = r"C:\Users\Admin\data.txt" # 原始字符串,不处理转义
domain = "example.com"
print(domain[0:7]) # 输出: example
print(domain[-3:]) # 输出: com
print(domain[:7] + ".org") # 拼接输出: example.org
print(domain * 2) # 重复输出: example.comexample.com
字符串格式化
除了传统的 % 操作符,Python 3.6 引入了更简洁高效的 f-string 格式化方法。
version = 3.11
feature = "Pattern Matching"
# 传统 % 格式化
print("Python %s 引入了 %s" % (version, feature))
# f-string 格式化 (推荐)
print(f"Python {version} 引入了 {feature}")
# 格式化字典数据
config = {"host": "127.0.0.1", "port": 8080}
for key, value in config.items():
print(f"Config -> {key}: {value}")
容器类型操作
在处理列表、字典和集合等可变容器时,需要特别注意引用赋值与浅拷贝(.copy())的区别。直接赋值只会创建新的引用,而拷贝会创建一个新的独立对象。
# --- 字典操作 ---
app_config = {"timeout": 30, "retries": 3}
config_ref = app_config # 引用赋值,指向同一内存对象
config_copy = app_config.copy() # 浅拷贝,创建新字典
del config_copy["retries"]
print(app_config) # 输出: {'timeout': 30, 'retries': 3} (原对象不受影响)
print(config_copy) # 输出: {'timeout': 30}
# --- 列表操作 ---
tasks = ["download", "parse", "upload"]
tasks_ref = tasks
tasks_copy = tasks.copy()
tasks_copy.remove("parse")
print(tasks) # 输出: ['download', 'parse', 'upload']
print(tasks_copy) # 输出: ['download', 'upload']
# --- 元组特性 ---
# 元组本身不可变,但如果其元素包含可变对象(如列表),该内部对象的状态可以被修改
coordinates = (10, 20, ["x", "y"])
coordinates[2].append("z")
print(coordinates) # 输出: (10, 20, ['x', 'y', 'z'])
# --- 集合操作 ---
# 集合无序且元素唯一,支持高效的成员测试和数学集合运算
active_users = {"alice", "bob"}
active_users.add("charlie")
beta_users = active_users.copy()
beta_users.update({"dave", "eve"})
beta_users.discard("alice") # discard 移除不存在的元素不会抛出异常
beta_users.remove("bob") # remove 移除不存在的元素会抛出 KeyError
print(active_users) # 输出: {'alice', 'bob', 'charlie'}
print(beta_users) # 输出: {'charlie', 'dave', 'eve'}