栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

加快datetime.strptime

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

加快datetime.strptime

是的,datetime.strptime()如果您放弃了很多灵活性和验证功能,那么解析日期的方法比快捷得多。strptime()允许使用带零填充和不带零填充的数字,并且仅匹配使用正确分隔符的字符串,而“丑陋”版本则不匹配。

您应该始终使用该timeit模块进行时间测试,它比cProfile这里的要精确得多。

确实,您的“丑陋”方法是以下方法的两倍strptime():

>>> from datetime import date, datetime>>> import timeit>>> def ugly(input_date):...     a= 1000 * int(input_date[0])...     b=  100 * int(input_date[1])...     c=   10 * int(input_date[2])...     d=    1 * int(input_date[3])...     year = a+b+c+d...     c=   10 * int(input_date[5])...     d=    1 * int(input_date[6])...     month = c+d...     c=   10 * int(input_date[8])...     d=    1 * int(input_date[9])...     day = c+d...     try:...         my_date = date(year, month, day)...     except ValueError:...         my_date = None... >>> def strptime(input_date):...     try:...         my_date = datetime.strptime(input_date, "%Y-%m-%d").date()...     except ValueError:...         my_date = None... >>> timeit.timeit('f("2014-07-08")', 'from __main__ import ugly as f')4.21576189994812>>> timeit.timeit('f("2014-07-08")', 'from __main__ import strptime as f')9.873773097991943

但是,您的方法可以得到改进。您可以使用切片:

>>> def slicing(input_date):...     try:...         year = int(input_date[:4])...         month = int(input_date[5:7])...         day = int(input_date[8:])...         my_date = date(year, month, day)...     except ValueError:...         my_date = None... >>> timeit.timeit('f("2014-07-08")', 'from __main__ import slicing as f')1.7224829196929932

现在它快了将近6倍。我还将这些int()调用移至try-except以将字符串转换为整数时处理无效输入。

您也可以使用它str.split()来获取零件,但这又使其变得稍微慢一点:

>>> def split(input_date):...     try:...         my_date = date(*map(int, input_date.split('-')))...     except ValueError:...         my_date = None... >>> timeit.timeit('f("2014-07-08")', 'from __main__ import split as f')2.294667959213257


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516844.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号