一日之计在于晨,不肝代码不封神~
前言
早晨肝代码的时候写了一个函数,用来匹配文本中的电话号码,其中有两个返回值,考虑到 调用函数时是先赋值再调用好,还是调用与赋值同时进行好? ,所以做了一个小测试,之前写代码过程中对于有多个返回值的函数我都是调用与赋值同时进行,因为代码量少。但结果到底如何,下面开始测试。
代码测试
# 导入需要的第三方库
import time
# 第一次测试——调用与赋值同时进行
start_time = time.time() # 第一次起始时间
tel_mark = get_tel(content_split_rst)[0]
text_index_li = get_tel(content_split_rst)[1]
end_time = time.time() # 第一次结束时间
print("1 cost", end_time-start_time, "seconds")
# 第二次测试——先赋值再调用
start_time = time.time() # 第二次起始时间
temp_var = get_tel(content_split_rst)
tel_mark = temp_var[0]
text_index_li = temp_var[1]
end_time = time.time() # 第二次结束时间
print("2 cost", end_time-start_time, "seconds")
被调用的函数:
def get_tel(content_split_rst): # 不提供 content_split_rst
tel_mark = 0 # 判断是否识别出电话的标记
# 设置正则表达式匹配规则
compile_str_li = [
'\(\d{3}\)\d{3}-\d{4}', # -> (212) 667-7024
'\d{3}-\d{3}-\d{4}', # -> 404-266-6613
'\d{3}/\d{3}-\d{4}', # -> 816/283-5352
'\d{6}-\d{4}', # -> 415 693-3337
'\(\+\d{5}\)\d{3}\d{4}', # -> (+44 171) 374 7262
'\(\d{12}\)', # -> (+44 171 568 4395)
'\d{3}\.\d{3}\.\d{4}', # -> 212.389.8042
'\d\.\d{3}\.\d{3}\.\d{4}', # -> 1.415.229.7166
'\+\d{11}', # -> +39 026204238
'\+\d{10}', # -> +47 24 16 91 87
'\(\d{2}\)\d{8}', # -> (47) 2100 8527
'\d{10}' # -> 212 325 8681
]
compile_li = [re.compile(i, re.DOTALL) for i in compile_str_li]
info_li = [] # 存储 tel信息 的列表
for text_index, text in enumerate(content_split_rst):
info_dic = {} # 存储 tel信息的字典
text = text.replace(' ', '') # 去掉空格
rst = [re.findall(compile, text) for compile in compile_li] # 获得匹配结果
if any(rst):
tel = list(filter(lambda x: x != [], rst))[0][0] # 保留符合非空列表,即 tel
info_dic['tel'] = tel
info_dic['index'] = text_index
info_li.append(info_dic)
del info_dic # 重置字典
tel_mark += 1 # 匹配到 tel 后标记值+1
return tel_mark, info_li
结果显示的确符合我的预期:先赋值再调用效率更高,而且足足快了近一倍
结论
==在使用的函数有多个返回值的时候先赋值再调用,而不是调用与赋值同时进行可以提高我们的代码效率==