python代码_你一定不知道的Python小技巧,提升你Python代码的可读性

Python的初学者,开发者都应该知道的代码可读性提高技巧,本篇主要介绍了如下内容:

  • PEP 8是什么以及它存在的原因
  • 为什么你应该编写符合PEP 8标准的代码
  • 如何编写符合PEP 8的代码

为什么我们需要PEP 8?

PEP 8 的存在是为了提高Python代码的可读性的。但为什么可读性如此重要?为什么编写可读代码是Python语言的指导原则之一?

正如Guido van Rossum所说:“代码的阅读频率远高于编写代码的频率”。比如,你可能花费几分钟或一整天的时间编写一段代码。一旦你写完它,你可能就再也不会写了,但你肯定要再读一遍。或者,这段代码可能仍然是你正在进行的项目的一部分。每次回到该文件时,你都必须记住该代码的作用以及编写代码的原因,因此可读性非常重要。

如果你是Python的新手,可能很难记住几天或几周之前编写代码的作用。但如果你遵循PEP 8,你就很好地命名了你的变量,添加了足够的空格更容易遵循代码中的逻辑步骤,还可以很好地注释你的代码。所有这些都意味着你的代码更易读。

如果你正在寻找开发工作,那么遵循PEP 8尤为重要。编写清晰易读的代码显示出专业性。它会告诉你的老板你知道如何很好地构建代码。

如果你有更多编写Python代码的经验,那么你可能需要与其他人协作。其他人可能从未见过你或以前见过你的编码风格,必须阅读并理解你的代码。

命名的规定

编写Python代码时,必须列举很多东西:变量,函数,类,包等。选择合理的名字将为你节省很多时间和精力。你将能够从名称中读懂某个变量,函数或类所代表的含义。你还可以避免使用那些可能导致后期难以调试错误的不适当的名称。

命名样式

下表总结了Python代码中的一些常见类型和命名规则:

1ae3d8294e7161d5e981936701d8d0fe.png

1.png

为了编写可读代码,你仍然需要谨慎选择字母和单词。除了在代码中选择正确的命名样式外,还必须仔细选择名称。

如何选择名称

在编写代码时,你应该在命名选择中加入相当多的思考,因为这样可以使代码更具可读性。在Python中命名对象的最佳方法是使用描述性名称来清楚表明对象所代表的内容。

命名变量时,你可能会选择简单的单字母小写名称,例如x。但是,除非你使用x作为数学函数的参数,否则不清楚x代表什么。想象一下,你将一个人的姓名存储为字符串,并且你希望使用字符串切片来格式化其名称。你最终会得到这样的东西:

>>> # Not Recommended>>> x = 'John Smith'>>> y, z = x.split()>>> print(z, y, sep=', ')'Smith, John'

这是有效的,但你必须跟踪x,y和z代表的内容。这可能让其他人产生困惑,更明确的名称选择将是这样的:

>>> # Recommended>>> name = 'John Smith'>>> first_name, last_name = name.split()>>> print(last_name, first_name, sep=', ')'Smith, John'

同样,为了减少你所做的输入量,在选择名称时使用缩写是很有帮助的。在下面的例子中,我们定义了一个函数db(),它接受一个参数x并将其加倍:

# Not Recommendeddef db(x): return x * 2

乍一看,这似乎是一个明智的选择。 db()很容易成为double的缩写。但想象一下,几天后回到这段代码,你可能已经忘记了你试图通过这个功能实现的目标,这会花很长时间回想。

以下示例更加清晰。如果你在编写代码后几天回到此代码,你仍然可以阅读并理解此函数的用途:

# Recommendeddef multiply_by_two(x): return x * 2

同样的理念适用于Python中的所有其他数据类型和对象,要始终尽量使用最简洁但最具描述性的名称。

代码布局

如何布置代码对于它的可读性有很大的作用。此处,你将学习如何添加垂直空格以提高代码的可读性,以及如何处理PEP 8中建议的79字符行限制

空白行

垂直空白或空行可以极大地提高代码的可读性。聚集在一起的代码可能是压倒性的,难以阅读。同样,代码中的空行太多会使其看起来非常稀疏,读者可能需要滚动超过必要的行。以下是关于如何使用垂直空白的三个关键指南。

1.最外层函数和类之间要留有两个空行。最高层函数和类应该是自包含的,并处理单独的功能。在它们周围放置额外的垂直空间是有意义的,因此很明显它们是分开的:

class MyFirstClass: passclass MySecondClass: passdef top_level_function(): return None

2.一个类里面的方法之间用一个空行。在一个类中,方法都彼此相关。最好只在它们之间留一行:

class MyClass: def first_method(self): return None def second_method(self): return None

3.在函数内使用空白行以显示清晰的步骤。有时,复杂的函数必须在return语句之前完成几个步骤。为了帮助读者理解函数内部的逻辑,在每个步骤之间留一个空行会很有帮助。

在下面的示例中,有一个计算列表方差的函数。这是两步问题,所以我在每个步骤之间留下了一个空行。在return语句之前还有一个空行。这有助于读者清楚地看到返回的内容:

def calculate_variance(number_list): sum_list = 0 for number in number_list: sum_list = sum_list + number mean = sum_list / len(number_list) sum_squares = 0 for number in number_list: sum_squares = sum_squares + number**2 mean_squares = sum_squares / len(number_list) return mean_squares - mean**2

如果仔细使用垂直空白,可以大大提高代码的可读性。它有助于读者直观地理解你的代码如何分成几个部分,以及这些部分如何相互关联。

最大行长度和换行

PEP 8建议行数限制为79个字符。当然,将语句保持在79个字符以内并不总是可行的。 PEP 8给出了允许语句在多行上运行的方法。

如果代码包含在括号,方括号或大括号中,Python将假定行继续:

def function(arg_one, arg_two, arg_three, arg_four): return arg_one

如果不能使用按规则继续,那么你可以使用反斜杠来代替换行:

from mypkg import example1,  example2, example3

如果需要在二元运算符周围换行,例如 + 和 ,则它应该在运算符之前发生。数学家认为在二元运算符之前换行可提高可读性*。比较以下两个例子。

下面是在二元运算符之前换行的示例:

# Recommendedtotal = (first_variable + second_variable - third_variable)

你可以立刻看到正在添加或减去的变量,因为操作符紧挨着正在操作的变量。 现在,让我们看一个在二元运算符之后换行的示例:

# Not Recommendedtotal = (first_variable + second_variable - third_variable)

在这里,很难看出哪个变量被添加,哪个变量被减去。

缩进

缩进或前导空格在Python中非常重要。Python中代码行的缩进级别决定了语句如何组合在一起。 请看以下示例:

x = 3if x > 5: print('x is larger than 5')

缩进的print语句让Python知道只有if语句返回True才能执行它。相同的缩进会告诉Python在调用函数或代码属于给定类时要执行的代码。 PEP 8给出的关键缩进规则如下:

  • 使用4个连续的空格来表示缩进;
  • 首选使用空格,再使用Tab;

Tab键与空格

如上所述,在缩进代码时应首先使用空格而不是Tab键。你可以在文本编辑器中调整Tab设置:当你按Tab键时,输出4个空格而不是Tab符号。

如果你使用的是Python 2,并且混合使用了Tab和空格来缩进代码,那么在运行它时将不会看到错误。为了帮助你检查一致性,可以在从命令行运行Python 2代码时添加 -t 标志。当你使用的Tab和空格不一致时,解释程序将发出警告:

$ python2 -t code.pycode.py: inconsistent use of tabs and spaces in indentation

如果使用 -tt 标志,则解释器将发出错误而不是警告,并且你的代码将不会运行。使用此方法的好处是解释器会告诉你不一致的位置:

$ python2 -tt code.py File "code.py
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值