python:re.sub的replace函数不接受额外的参数 – 如何避免全局变量?
发布时间:2020-11-18 01:56:04 所属栏目:Python 来源:互联网
导读:我正在尝试将文本文件中的所有时间戳(形式为’HH:MM:SS’)增加一个命令行参数指定给我程序的秒数. 这是迄今为止我的努力的简化版本: import refrom datetime import datetime, timedeltatime_diff = timedelta(seconds=10)def replace_time(matchobj): if
我正在尝试将文本文件中的所有时间戳(形式为’HH:MM:SS’)增加一个命令行参数指定给我程序的秒数. 这是迄今为止我的努力的简化版本: import re from datetime import datetime,timedelta time_diff = timedelta(seconds=10) def replace_time(matchobj): if matchobj.group(1) not in [None,'']: return (datetime.strptime(matchobj.group(1),"%H:%M:%S") + time_diff).strftime("%H:%M:%S") print re.sub('(dd:dd:dd)',replace_time,"01:27:55") 这很好用:运行它的结果是01:28:05这正是我想要的. 但是,我听说我应该尽可能少地使用全局变量.所以我想知道是否有一种简单的方法可以将time_diff作为参数传递给replace_time而不是使用全局变量. 我尝试了显而易见的,但它失败了: def replace_time(matchobj,time_diff): if matchobj.group(1) not in [None,"%H:%M:%S") + time_diff).strftime("%H:%M:%S") time_diff = timedelta(seconds=10) print re.sub('(dd:dd:dd)',replace_time(matchobj,time_diff),"01:27:55") 出现此错误:NameError:未定义名称“matchobj”,因此我无法直接传递matchobj. 我看过standard re page和standard re howto,但找不到我需要的信息.我怎样才能避免在这里使用全局变量?我可以以某种方式将额外的参数传递给replace_time函数吗?提前致谢. 解决方法你可以在一个闭包中包装一个函数,如下所示:def increment_by(time_diff): def replace_time(matchobj): if matchobj.group(1) not in [None,'']: return (datetime.strptime(matchobj.group(1),"%H:%M:%S") + time_diff).strftime("%H:%M:%S") return replace_time time_diff = timedelta(seconds=10) print re.sub('(dd:dd:dd)',increment_by(time_diff),"01:27:55") 或者您可以像这样使用stdlib中的部分: from functools import partial def replace_time(time_diff,matchobj): if matchobj.group(1) not in [None,'']: return (datetime.strptime(matchobj.group(1),partial(replace_time,"01:27:55") (编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- python – Pandas isna()和isnull(),有什么区别?
- python – 在大熊猫DataFrame中选择和删除具有相
- .net – 一旦线程启动,我应该保持对线程的引用吗
- 示例python twisted事件驱动的Web应用程序递增请
- python – Django:使用对象作为字典键是否合理?
- python-2.7 – 如何在python中使用webdriver选择
- python-3.x – Keras(TensorFlow,CPU):训练循环
- version-control – 从hg存储库中删除二进制文件
- 使用dbf Python模块以只读方式打开.DBF文件
- Python键入模块类型
热点阅读