平时是否思考过如何编写干净的 Python 代码吗?
今天我将给大家分享五个技巧,确保你的代码正常工作、易于阅读并充分利用 Python 提供的功能模块。喜欢本文记得关注、点赞。
使用易于记忆的变量名
通常在编程时,我们不会停下来考虑一个易于阅读、发音和记忆的描述性变量名称。这是一个不好的做法,因为我们将在不考虑描述性变量名称时节省的时间,我们将在未来花费它来尝试理解该变量应该做什么。
❌Bad way
from datetime import date
ymdstr = date.now().isoformat()
✅Good way
from datetime import date
currentDate = date.now().isoformat()
哪个更好地描述了变量的功能?ymdstr 还是 currentDate?
在声明变量并为它选择一个好名字时,最好多花几秒钟,而不是在未来浪费两倍(或三倍)的时间试图理解它的功能是什么。
创建易于搜索的变量名称
每个程序员都应该知道的一件事是,在我们的编程生涯中,我们将花费更多的时间阅读代码并尝试理解它,而不是编写它。
❌Bad way
# What the h*ck is 420 for?
result = serializer.serialize(data, 420)
✅Good way
json = serializer.serialize(data, sort_keys=True, indent=4)
如果我们停下来阅读两个代码摘录(好的和坏的),我们会意识到在坏代码摘录之前快速理解好的代码摘录要容易得多。
使用具有高度描述性的名称
当你将函数作为参数送给另一个函数时,它导致的唯一原因是我们无法正确遵循代码并且我们很难理解它的作用。
❌Bad way
import re
address = 'S Grand Ave, LA 90013'
city_zip_code_regex = re.compile("^[^,]+,\s*(.+?)\s*(\d{5})$")
matches = city_zip_code_regex.match(address)
save_city_zip_code(matches.group(1), matches.group(2))
✅Good way
address = 'S Grand Ave, LA 90013'
city_zip_code_regex = re.compile("^[^,]+,\s*(?P<city>.+?)\s*(?P<zipcode>\d{5})$")
matches = city_zip_code_regex.match(address)
save_city_zip_code(matches.group('city'), matches.group('zipcode'))
通过这个例子,我们可以看到如何通过命名子模式来减少正则表达式的依赖。这使得代码更容易阅读和理解。
不要过度使用 if-else
很多时候,我们并没有过多考虑未来,在某些时候我们可能不得不修改代码,所以我们尽量不要滥用 if-else。if-else嵌套越多,代码就越难理解。
❌Bad way
def is_shop_open(day: str):
if day:
day = day.lower()
if day == 'friday':
return True
elif day == 'saturday':
return True
elif day == 'sunday':
return True
else:
return False
else:
return False
✅Good way
def is_shop_open(day: str):
for open_day in ['friday','saturday','sunday']:
if day == open_day:
return True
return False
看看这个例子有多干净。行数更少,更容易理解。记住:显式优于隐式。
不要添加不必要的上下文
这个小的技巧是基于"不要重复自己"。如果你拥有的任何类或对象的名称已经描述了某些内容或提供了有关其功能的明确信息,那么在变量名称中重复自己是不好的。
❌Bad way
class Car:
carMake = ''
carModle = ''
carColor = ''
#...
}
✅Good way
class Car:
make = ''
modle = ''
color = ''
#...
通过这种方式,我们不会重复汽车,因为它过于重复,并没有真正为我们增加价值。记住,越简单越好。
总结
如何编写更简洁、更高效的 Python 代码不仅考验一个人的编码内功,更能让阅读代码的人容易理解,提升工作效率。