ChatGPT优化Python代码的小技巧

使用 chatGPT 优化代码并降低运行时的云成本

微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩

许多开发人员说“过早的优化是万恶之源”。

这句话的来源归功于Donald Knuth。在他的书《计算机编程的艺术》中,他写道:

“真正的问题是,程序员在错误的时间和错误的地方花费了太多时间来担心效率;过早的优化是编程中万恶之源。”

这句话起源于软件开发的早期阶段,当时为了优化目的而重写代码会消耗开发人员的大量时间,但预计只会产生非常有限(如果有的话)的成本节省。

在当今时代,随着生成的 AI 产品变得越来越容易获得,重写代码成为一项可以非常轻松地完成的任务,借助诸如 chatGPT 之类的工具。

在这个简单的示例中,我将演示如何在不到一分钟的时间内优化一个小的 python 脚本,开发人员方面的工作量最少,同时创造显着减少运行时间的潜力,从而以以下形式产生更具影响力的效果降低云运营成本。

我采用了一个简单的脚本来读取 HTTP 访问日志文件,作为脚本的参数,然后打印日志中每个 HTTP 响应状态代码的出现次数。

原代码由多维·克劳斯纳编写,并且可以在以下位置找到:https ://github.com/mr-anderson86/python_scripts/tree/master/get_http_codes 。

我从一个非常简单的 chatGPT 请求开始:

这是 chatGPT 生成的脚本:

import sys
from collections import defaultdict

def count_status_codes(log_file):
    status_counts = defaultdict(int)
    with open(log_file, 'r') as f:
        for line in f:
            # Extract the HTTP response status code from each line
            status_code = line.split()[-2]
            status_counts[status_code] += 1
    return status_counts

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('Usage: python script.py log_file')
        sys.exit(1)
    log_file = sys.argv[1]
    status_counts = count_status_codes(log_file)
    for status_code, count in status_counts.items():
        print(f'{status_code}: {count}')

运行原始脚本和 chatGPT 生成的脚本后,我注意到一个小差异——我没有要求输出以 JSON 格式生成,所以 chatGPT 只生成了一个简单的文本输出:

没过多久,chatGPT 就更新了脚本以创建 JSON 格式的输出。我问了以下问题:

在 chatGPT 更新后,脚本如下所示:

import sys
import json
from collections import defaultdict

def count_status_codes(log_file):
    status_counts = defaultdict(int)
    with open(log_file, 'r') as f:
        for line in f:
            # Extract the HTTP response status code from each line
            status_code = line.split()[-2]
            status_counts[status_code] += 1
    return status_counts

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('Usage: python script.py log_file')
        sys.exit(1)
    log_file = sys.argv[1]
    status_counts = count_status_codes(log_file)
    print(json.dumps(dict(status_counts), indent=4))

这次更新后,两个脚本的输出看起来是一样的:

现在是时候向两个脚本添加一些测量并再次运行它们了。我使用时间模块来测量脚本的运行时间,添加以下代码:

import time
## All other imports and function definitions here
start_time = time.time()
main()
print("--- %s seconds ---" % (time.time() - start_time))

差异惊人:

我们在这里看到的是一个脚本,其功能与原始脚本完全相同,但从运行时的角度来看,性能提高了近 100 倍!

显然,这个例子并没有涵盖所有可能的边缘情况。例如,如果每个日志条目中的值以非常规顺序写入日志,则此处由 chatGPT 生成的代码不支持所需的功能,而原始脚本确实解决了这种情况。必须在生成的 AI 创建代码后对其进行审查,并确保原始功能没有受到任何损害。

如本例所示,其含义是压倒性的。我可以想象各种类似的函数和代码片段在生产系统中作为 AWS Lambda 函数(或类似资源)运行,每天在大规模操作中被触发数百万次。

总而言之,我相信像 chatGPT 这样的生成式人工智能工具可以帮助我们减轻对过早优化代码的恐惧,并在大规模生产系统中节省大量时间和云运营成本。

推荐书单

《图解数据智能》

《图解数据智能》是一本为数字资源的对接方、分配方以及广大的入门学习者提供相关数据智能概念的科普读物。书中各个概念之间相对独立,读者可以将其作为一本检索用的工具书籍,也可以根据自己的兴趣灵活查阅相关篇章。

无论你是数智化领域的专业从业人员,还是刚刚毕业想要进入该领域的技术小白,抑或是正面临着数字化转型的政府或企业人员,或者是千千万万个生活在这个数智化社会中的普通人,都可以阅读此书,你将从酣畅淋漓的技术释疑和轻松有趣的漫画解读中,找到自己的答案。

《图解数据智能》(张燕玲,许正军,张军)【摘要 书评 试读】- 京东图书京东JD.COM图书频道为您提供《图解数据智能》在线选购,本书作者:,出版社:清华大学出版社。买图书,到京东。网购图书,享受最低优惠折扣!icon-default.png?t=N4P3https://item.jd.com/13368169.html

 

精彩回顾

《Pandas1.x实例精解》新书抢先看!

【第1篇】利用Pandas操作DataFrame的列与行

【第2篇】Pandas如何对DataFrame排序和统计

【第3篇】Pandas如何使用DataFrame方法链

【第4篇】Pandas如何比较缺失值以及转置方向?

【第5篇】DataFrame如何玩转多样性数据

【第6篇】如何进行探索性数据分析?

【第7篇】使用Pandas处理分类数据

【第8篇】使用Pandas处理连续数据

【第9篇】使用Pandas比较连续值和连续列

【第10篇】如何比较分类值以及使用Pandas分析库

微信搜索关注《Python学研大本营》

访问【IT今日热榜】,发现每日技术热点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值