如何精简比较两个MM/DD/YYYY格式日期的冗长if/elif嵌套函数?
优化方案
方案1:使用datetime标准库(最推荐)
不用自己手动实现日期比较逻辑,标准库已经处理了所有边界情况,可读性和可靠性最高:
from datetime import datetime def get_oldest(date1, date2): """给定两个格式为"MM/DD/YYYY"的日期字符串,返回更早的那个日期""" date_pattern = "%m/%d/%Y" if datetime.strptime(date1, date_pattern) < datetime.strptime(date2, date_pattern): return date1 return date2
如果追求更简洁的写法,还可以搭配min函数直接指定比较规则:
from datetime import datetime def get_oldest(date1, date2): """给定两个格式为"MM/DD/YYYY"的日期字符串,返回更早的那个日期""" return min(date1, date2, key=lambda x: datetime.strptime(x, "%m/%d/%Y"))
方案2:无依赖的元组比较法
如果不想引入额外模块,可以把拆分后的日期调整为「年、月、日」顺序的元组,Python的元组默认会逐位比较大小,完全可以替代多层嵌套的if判断:
def get_oldest(date1, date2): """给定两个格式为"MM/DD/YYYY"的日期字符串,返回更早的那个日期""" def parse_date(date_str): month, day, year = date_str.split("/") return (year, month, day) return date1 if parse_date(date1) < parse_date(date2) else date2
变量命名建议
- 避免无意义的后缀:
date_one、date_two这类命名不如直接叫parsed_date1、parsed_date2更清晰,拆分日期时直接解包为month, day, year变量,不要靠索引访问,避免搞混字段顺序 - 固定常量大写:如果日期格式是固定值,可以提为模块级常量,比如
DATE_PATTERN = "%m/%d/%Y",后续修改时不用全局找硬编码的格式串 - 函数名表意精准:
get_oldest可以调整为get_earlier_date,避免其他人误以为是返回年龄最大的对象之类的歧义
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

