首页 > 解决方案 > 如何将此函数转换为优化函数?它应该更高效地尊重时间?

问题描述

我得到了这个功能,它让用户可以检索具有特定值字段的日志。例如,如果选择字段为 getUser 并将 val1 设置为 john,则可以获取用户字段中具有 john 值的所有日志。

这些是日志的一些示例:

l1 = Log(int(time.mktime(time.strptime('Mon Mar 09 12:00:00 2020'))), 'john', 23, 'signin', 0)

l2 = Log(int(time.mktime(time.strptime('Mon Mar 09 14:10:00 2020'))), 'mary', 42, 'click', 13)

...

我的日志 = [l1,l2,...]

def registerEqualQuery(logs, field):
    def query(val1):
        res = []
        for (index,log) in enumerate(logs):
            if getattr(log, field)() == val1:
                res.append(log)
        return res

if field not in [’getArrivaltime’,’getUser’,’getSession’,’getEvent’,’getUsrfield’]:
raise Exception(’field name not found’)
return query

q1=registerEqualQuery(mylogs,'getUser')
result = q1('john')

这会给我 l1 作为输出。

通过下面的操作,我可以知道每秒可以得到多少查询。

s = time.time(); result = q7(’john’); e = time.time()
1/(e-s)

我想优化此功能以每秒获得更多查询。应该使用字典,但我不知道如何使用。有人可以帮忙吗?

标签: pythondictionaryoptimization

解决方案


总而言之:

def registerEqualQuery(logs, field):
    def query(val1):
        return [log for log in logs if getattr(log, field)() == val1]

推荐阅读