inkscape生成g代码_WTF?能把Python代码写得这么优雅的都是神仙程序员吧!

本文介绍了优化Python代码的几种方法,包括使用生成式、enumerate、join方法以及避免临时变量交换。此外,还探讨了通过Cython模块提升代码执行速度,详细讲解了Cython的安装和使用,展示了Cython如何显著提高斐波那契数列计算的速度。最后,提到了使用科学计算库如numpy来提升代码效率。
摘要由CSDN通过智能技术生成

“人生苦短,我用Python”,说的就是Python开发“快”的优势,相同的代码量能够完成其他语言数倍代码量的任务。一般情况下,像C++、C、JAVA 、GO这类编译型语言要比PHP、Python、JavaScript这类解释性语言要快一些,但是各有各的优势。

Python以其开发方便、语言生态健全,乘着人工智能之风很快成为了一门明星语言。使用Python提升开发效率的同时,代码的运行效率却没那么高。下面将介绍几种简单的方法,尝试提升代码的可读性、执行效率。

f0a2155543f95797292d1abbc77d47e4.png

一、优化编程惯例

1)用生成式生成列表:

假设我们正在编写爬虫,现在需要将解析到的信息生成列表。

不优雅的方法:

bebf8a861eb70e3a5ade32f50c77a55d.png

得到:[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]

用生成式更加优雅的完成:

340b8653a5a89d04387e0126815a3532.png

输出:[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]

2)使用enumerate进行迭代:

enumerate方法用于将一个可遍历的数据对象组合为一个索引序列,同时输出数据和数据下标,一般用于for循环之中,演示如下:

不优雅的方法:

f13961f3aeb1cfac73f01707b86fee57.png

输出:

b0f82ad8364928e103c0f99b46b3aa9a.png

优雅的方法,使用enumerate函数:

99d9218d71cc7953023095a7f7d72a6e.png

3)用join方法生成字符串:

join()函数能够将序列中的元素按照给定的字符链接生成一个新的字符串。

不好的代码:

5c4ec82f33786d4126296504be8544b2.png

输出:我-在-知-了-课-堂-学-Python-

使用join方法:

5bfe040c1c8ef1894c64e6fe8fb62d43.png

输出:我-在-知-了-课-堂-学-Python

4)不适用临时变量交换两个值:
fc355d9913fd62bbc9c81f7ab435e95a.png
5)使用:
92316d4b20d5ab320121f9e5e070710a.png

二、使用Cython模块提升代码执行速度

Python有着良好的扩展性与接口功能,人工智能大多数库都是C++或者C写来由Python调用。大公司会使用Python来提升开发效率,用C来弥补性能缺口。在Python官方文档中,也给出了Python的C API接口的文档,但是下面也标注了“给 C/C++ 程序员的参考手册”,绝非等闲之辈能轻易掌握!好消息是,有Cython模块,官方是这样介绍的(翻译):

[Cython]是一种编程语言,它使编写Python语言的C扩展与Python本身一样容易。它旨在成为[Python]语言的超集,从而为它提供高级,面向对象,功能和动态编程。

Cython是Python编译器。这意味着它可以编译普通的Python代码而无需进行更改(除了一些尚不支持的语言功能的明显例外),接下来使用Cython提升Python执行速度。

4db4f5ecacfaad6a5fea69f55fc0167b.png
1)安装:

使用cython最简单的方法是执行

72a2fa17f1634d276fa60f25fde113b6.png

也可以从https://cython.org/下载最新版本 。解压缩tarball或zip文件,输入目录,然后运行:

d31cb86ab05fe68ea664b6283ede7dcd.png

另外需要安装gcc,linux下一般自带。

2)Hello, Cython:

使用官方推荐的方法(使用setuptools)构建我们的代码,

创建hello.pyx文件(你没看错,不是.py而是.pyx)并键入:

744f383051fb938ca892f4081b58d799.png

创建对应的setup.py脚本:

d360efe391674f0500fdc120aae93db9.png

cmd到当前目录,执行:

8e50c6eb5f72723a39cdbfc9a87ac25d.png
1477d2b1c04706a5d29cbbcb75d252d2.png

gcc与g++都安装但是,报错,缺乏 Microsoft visual C++ 14.0,遂下载安装:

b8260bdf4b2ee2a20ba6bb445d47c3c0.png

4GB!太大了,用linux试试!

在centos环境下,重复上述步骤:

42a66a37e804d9f15c218dbe61959282.png

成功,并且生成了一个hello.cpython-36m-x86_64-linux-gnu.so文件, 在Windows下会生成.pyd文件。

使用:

cdececde635565c7871c4c11ec18d886.png
515d9e4ccd203f7aa122a66536334f61.png

hon VS Python :

斐波那契数列,通俗易懂,使用Python容易实现,也考验计算能力。我们分别用Python和cython来计算斐波那契第38项的值,同一台机器,看谁算的快!

使用Python:

创建fib1.py并键入:

0460ec4ea481f54582a2e5f0255ec718.png

成绩:11.73秒

8f779e1af756eeb2304fa667e0d5bd60.png

使用Cython:

创建一个fib2.pyx并键入:

248404ae78672c3838088d81a2db300c.png

创建相应的setup.py:

78c32c99bcf0512eba48ea551f66282a.png

执行:

5c02a3ff335f8449870500844a050d4c.png

建立测试文件test.py:

641377466ecaf3467c0e4a1f96c9f3c3.png

成绩,2.20秒

a353c172feeb2f6e160c1746b710604e.png

awesome!快了5倍多,实际上随着项的增大,成绩还会有所提升。

使用cython不仅能够大幅提升代码的运行速度,还能够起到加密核心代码的作用,即便是被对手入侵了服务器,也不必担心核心代码泄露。

三、使用科学计算库

知名的科学计算库如numpy、pandas等底层都使用C++、C完成,这在一定程度上保证了执行速度,另一方面也能帮助我们提升可读性。

我们分别用numpy和传统的**方法来计算一个数组的乘方,

ce402f7227330aa2579ce290a7f1a03b.png

很给力,快了数倍:

ea6f8fd727cedc20dcb4b18e6f19817a.png

相信,不断的优化我们的编程习惯,像写诗一样写代码,养成良好科学的计算习惯,一定能够写出pythonic代码!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值