面试题答案
一键面试常量的适用场景
- 配置参数:在项目的配置模块中,当配置参数在整个项目运行过程中基本不会改变时,使用常量更为合适。例如数据库连接的默认端口号、文件存储的根目录路径等。假设项目中有一个数据库配置模块
db_config.py
,其中定义数据库默认端口常量:
# db_config.py
DEFAULT_DB_PORT = 3306
这样在其他需要连接数据库的模块中,如 db_connection.py
,可以直接引用这个常量,使代码更清晰,且如果后续需要修改端口号,只需在常量定义处修改。
# db_connection.py
from db_config import DEFAULT_DB_PORT
def connect_to_db():
# 连接数据库逻辑,使用常量 DEFAULT_DB_PORT
pass
- 固定数值或字符串:在工具类模块中,如果涉及到一些固定的数值计算或者固定格式的字符串。比如在一个文本处理工具模块
text_utils.py
中,定义一个表示文件编码的常量:
# text_utils.py
DEFAULT_ENCODING = 'utf - 8'
在文件读取或写入函数中使用该常量,提高代码可读性。
枚举的适用场景
- 状态标识:在表示状态的模块中,枚举是更好的选择。例如在一个任务管理模块
task_management.py
中,任务可能有不同的状态,如待处理、进行中、已完成。使用枚举可以清晰地定义这些状态:
from enum import Enum
class TaskStatus(Enum):
PENDING = '待处理'
IN_PROGRESS = '进行中'
COMPLETED = '已完成'
def update_task_status(task, new_status):
if not isinstance(new_status, TaskStatus):
raise ValueError('无效的任务状态')
# 更新任务状态逻辑
pass
这样在代码中使用 TaskStatus.PENDING
等枚举值,比直接使用字符串或数字更具可读性,且类型安全性更高。
2. 选项集合:在某些功能模块中,用户可能有几种固定的选项可供选择。例如在一个图形渲染模块 rendering.py
中,渲染模式可能有 2D
、3D
、VR
等选项,使用枚举定义:
from enum import Enum
class RenderMode(Enum):
MODE_2D = '2D'
MODE_3D = '3D'
MODE_VR = 'VR'
def render_scene(mode):
if not isinstance(mode, RenderMode):
raise ValueError('无效的渲染模式')
# 根据不同渲染模式进行渲染逻辑
pass
提高代码可读性和可维护性的方式
- 常量:
- 命名规范:常量命名使用全大写字母,单词间用下划线分隔,这样可以与普通变量区分开,一眼就能识别出是常量。
- 集中管理:将相关常量集中在一个或几个特定的模块中,便于查找和修改。例如项目中所有与系统环境相关的常量放在
env_constants.py
模块中。
- 枚举:
- 清晰的成员命名:枚举成员的命名要清晰地表达其代表的含义,避免使用模糊或容易混淆的名称。
- 类型检查:在使用枚举值的函数或方法中,进行类型检查,确保传入的参数是正确的枚举类型,避免因错误传入非枚举值而导致的难以排查的错误。