v2-170b411c429b42faad419ee6400d3a3b_1440w.jpg
像写诗一样写代码,良好的编码习惯有助于提升编程功力,下面的建议几乎都出自《编写高质量代码-改善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的代码。

标签: Python, Pythonic, 读书总结

分类: 所有文章

相关文章

2021.06.22   Python小技巧:pymysql像pymongo一样插入字典数据

仅有一条评论

  1. 热搜 热搜

    文章不错交个朋友

添加新评论