像写诗一样写代码,良好的编码习惯有助于提升编程功力,下面的建议几乎都出自《编写高质量代码-改善python程序的91个建议》一书。我将其中个别无需过多解释并且可以快速吸收的良好习惯总结出来,如下:
建议一、使用enumerate()获取可迭代对象的索引和值
假如让你在打印一个列表的同时打印对应元素的索引,相信你一口气能写很多种方法。
随便来一种,比如,
list1 = ['a', 'b', 'c', 'd', 'e']
index = 0
for i in list1:
print(index, i)
index += 1
得到结果如下:
0 a
1 b
2 c
3 d
4 e
但是使用内置的enumrate函数会更加优雅:
list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
for x, i in enumerate(list1):
print(x, i)
这样写,会得到同样的结果。
建议二、使用生成式生成数组
要求生成一个100以内偶数的列表,
不优雅的写法:
list1 = []
for i in range(0, 100):
if i % 2 == 0:
list1.append(i)
print(list1)
优雅的写法:
list1 = [i for i in range(0, 100) if i % 2 == 0]
print(list1)
建议三、使用join函数连接数组字符
list1 = ['a', 'b', 'c', 'd']
print(''.join(list1))
print('-'.join(list1))
得到输出如下:
abcd
a-b-c-d
建议四、使用join函数取代 + 拼接字符串
str1, str2, str3 = 'I', 'love', 'u'
print(str1 + str2 + str3)
print(''.join([str1, str2, str3]))
得到输出如下:
Iloveu
Iloveu
如果拼接次数较多,性能上的差异就会被放大,有时候拼接在循环中发生,首选join方法。
建议五、不使用中间变量交换两变量数值
a, b = 1, 2
# 方法一、使用中间变量
temp = a
a = b
b = temp
# 方法二、
a, b = b, a
方法二会带来空间和性能上的优势。
建议六、使用科学计算库
知名的科学计算库如numpy、pandas等底层都使用C++、C完成,这在一定程度上保证了执行速度,另一方面也能帮助我们提升可读性。
我们分别用numpy和传统的**方法来计算一个数组的乘方:
import time
import numpy as np
#定义一个大数组
arr_list = list(range(10000000))
np_start = time.time()
np_list = np.array(arr_list)
res = np_list ** 2
np_end = time.time()
def pow2(x):
return x ** 2
#使用**方法
py_start = time.time()
res1 = [pow2(i) for i in arr_list]
py_end = time.time()
print("numpy用时{0}秒\n **用时{1}秒".format(np_end - np_start, py_end - py_start))
很给力,快了数倍:
numpy用时0.5964438915252686秒
**用时4.138192176818848秒
相信我们只要不断优化编码方式,养成良好的编码习惯,一定能够写出更加pythonic的代码。
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
作者: Austin 发表日期:2021-05-02 22:45
文章不错交个朋友