在进行 Python 全栈开发时,后端基础知识至关重要。今天我们深入探讨 Day04 的核心内容:字符编码、List 与 Tuple 的使用,以及条件判断的实战应用。掌握这些知识,能有效避免开发中常见的编码问题,并编写出更高效、更健壮的 Python 代码。
字符编码深度剖析
字符编码是 Python 后端开发中不可忽视的一环。早期计算机使用 ASCII 编码,仅能表示英文字符。随着全球化发展,出现了 Unicode 编码,它为世界上几乎所有字符都分配了一个唯一的数字编号。常见的 Unicode 实现方式有 UTF-8、UTF-16 等。
编码与解码
- 编码 (Encode): 将 Unicode 字符串转换为特定编码格式的字节序列,例如 UTF-8。
- 解码 (Decode): 将特定编码格式的字节序列转换为 Unicode 字符串。
Python 3 默认使用 UTF-8 编码。如果处理包含非 ASCII 字符的文件或网络数据,务必确保编码方式正确,否则可能出现乱码。
常见问题与解决方案
问题: 从文件中读取数据时出现
UnicodeDecodeError异常。
原因: 文件编码格式与 Python 默认解码方式不一致。
解决方案: 在打开文件时指定正确的编码方式:
with open('data.txt', 'r', encoding='gbk') as f: # 假设文件使用 gbk 编码 content = f.read() print(content)问题: 向数据库写入数据时出现编码错误,例如在使用 MySQL 时。

原因: 数据库连接的字符集设置不正确。
解决方案: 在连接数据库时指定正确的字符集,例如:
import pymysql conn = pymysql.connect(host='localhost', user='root', password='password', database='testdb', charset='utf8') # 指定 utf8 字符集 cursor = conn.cursor() sql = "INSERT INTO users (name) VALUES ('你好')" cursor.execute(sql) conn.commit() cursor.close() conn.close()
List 与 Tuple:灵活的数据容器
List (列表) 和 Tuple (元组) 是 Python 中常用的数据容器,用于存储多个元素。
List 的特性
- 可变性: List 中的元素可以修改、添加或删除。
- 常用操作:
append()、insert()、remove()、pop()、sort()等。
Tuple 的特性
- 不可变性: Tuple 创建后,其元素不能修改。
- 常用场景: 用于存储不希望被修改的数据,例如配置信息、函数返回值等。
- 性能优势: 由于 Tuple 的不可变性,其访问速度通常比 List 快。
List 与 Tuple 的选择
- 如果需要频繁修改数据,选择 List。
- 如果数据不需要修改,并且对性能有较高要求,选择 Tuple。
实战示例
# List 示例
my_list = [1, 2, 3, 'a', 'b']
my_list.append(4) # 添加元素
my_list[0] = 0 # 修改元素
print(my_list) # 输出: [0, 2, 3, 'a', 'b', 4]
# Tuple 示例
my_tuple = (1, 2, 3)
# my_tuple[0] = 0 # 错误:Tuple 不支持修改
print(my_tuple) # 输出: (1, 2, 3)
条件判断:控制程序流程
条件判断(if 语句)是编程中常用的控制结构,用于根据条件执行不同的代码块。
基本语法
if condition:
# 当 condition 为 True 时执行的代码
elif another_condition:
# 当 condition 为 False 且 another_condition 为 True 时执行的代码
else:
# 当所有条件都为 False 时执行的代码
实战案例
例如,判断用户输入的年龄是否大于 18 岁:
age = int(input("请输入您的年龄:"))
if age >= 18:
print("您已成年,可以访问本网站。")
else:
print("您未成年,请在家长的陪同下访问。")
嵌套条件判断
if 语句可以嵌套使用,以实现更复杂的逻辑判断。
score = int(input("请输入您的成绩:"))
if score >= 60:
print("恭喜您,及格了!")
if score >= 80:
print("成绩优秀!")
else:
print("成绩良好。")
else:
print("很遗憾,您不及格。")
实战演示:用户登录验证
接下来,我们演示一个简单的用户登录验证程序,综合运用字符编码、List Tuple 和条件判断的知识。
# 用户信息(存储在 Tuple 中)
users = [('admin', '123456'), ('user1', 'password')] # 实际项目中需要加密存储密码
username = input("请输入用户名:")
password = input("请输入密码:")
# 遍历用户列表,进行验证
for user in users:
if user[0] == username and user[1] == password:
print("登录成功!")
break # 登录成功后退出循环
else:
print("用户名或密码错误。") # 如果循环正常结束,说明没有找到匹配的用户
这个例子展示了如何利用所学知识构建一个简单的后端功能。在实际项目中,用户数据通常存储在数据库中,例如 MySQL 或 PostgreSQL,并使用 Nginx 进行反向代理和负载均衡,提高系统的并发连接数和稳定性,同时使用宝塔面板进行服务器管理和维护。
每日一题
请用 Python 编写一个函数,接收一个 List 作为参数,返回该 List 中所有元素的和。如果 List 中包含非数字元素,则忽略该元素。
def sum_list(my_list):
total = 0
for item in my_list:
if isinstance(item, (int, float)): # 检查是否为数字类型
total += item
return total
# 测试
my_list = [1, 2, 'a', 3.5, 4]
result = sum_list(my_list)
print(result) # 输出: 10.5
冠军资讯
加班到秃头