【发布时间】:2017-08-07 19:54:03
【问题描述】:
我可以用两种方式编写我的函数。
def output_ip_hist(target, final, stats, table_name, bulk_qty, type = "sql"):
if(type == "sql"):
field_names = ",".join(get_field_names(final, table_name))
count = 0
stats[table_name] = 0
values = []
for comp_name, row in final.items():
for ip_address, sub_row in row.items():
for index, ip_hist in enumerate(sub_row):
hist_item = ip_hist.replace('"', "'")
values.append('("' + comp_name + '", "' + ip_address + '", ' + str(index) + ',"' + hist_item + '")')
count += 1
if(count == bulk_qty):
insert_sql_many(target, count, table_name, field_names, values, stats)
count = 0
values = []
if(count != 0):
insert_sql_many(target, count, table_name, field_names, values, stats)
elif(type == "csv"):
for comp_name, row in final.items():
for ip_address, sub_row in row.items():
for index, ip_hist in enumerate(sub_row):
insert_csv(target, { "computer_name": comp_name, "id": str(index), "ip_address": ip_address, "hist_item": ip_hist.replace('"', "'") }, stats, table_name)
这是第一种方式。这种方式的缺点是循环被写了两次,造成了一些重复。
第二种方法是将最外面的 if 语句移到循环内,这样循环只完成一次,但这样做的缺点是 if 语句在每个循环上都执行,从而减慢了循环速度,这可能循环通过 400 万条记录。
我想知道是否有可能两全其美,减少重复并尽可能快地保持循环。
谢谢!
【问题讨论】:
标签: python loops optimization