>>> from env_helper import info; info()
页面更新时间: 2021-09-02 10:01:17
运行环境:
    Linux发行版本: Debian GNU/Linux 11 (bullseye)
    操作系统内核: Linux-5.10.0-8-amd64-x86_64-with-glibc2.31
    Python版本: 3.9.2

1.5. 通过适当添加空行使代码布局更为优雅、合理

布局清晰、整洁、优雅的代码能够给阅读它的人带来愉悦感,而且它能帮助开发者之间进行良好的沟通。 在一个团队中,保持良好的代码格式需要团队成员在选取一套合适的代码 格式规则的基础上遵从和应用。 同时它需要每个团队成员树立正确的态度,因为实际工作中有很多开发者抱着这样的想法:“代码能工作才是最重要的”, 但往往代码会不断修改,且可读性直接关系到可维护性和可扩展性。 因此我们需要端正态度——“代码不是恒定的,只有风格才能延续,能工作的代码和整洁、优雅的格式同样重要”。

为了让读者更加深人地理解代码布局的重要性,我们先来看一个猜数字游戏的示例。 下面两段代码,编码完全相同,只是在排版上做了一定修改。 你觉得哪个更加容易阅读呢?

1.5.1. 示例一:

>>> import random
>>>
>>> guesses_made = 0
>>>
>>> name = input(' Hello! What is your name?\n')
>>>
>>> number = random.randint(1, 20)
>>>
>>> print (('Well, {0}, I am thinking of a number between 1 and 20.').format(name))
>>>
>>> while guesses_made < 6:
>>>     guess = input('Take a guess: ')
>>>     guesses_made +=1
>>>     if int(guess) < number:
>>>         print (' Your guess is too low.')
>>>     if int(guess) > number:
>>>         print ('Your guess is too high.' )
>>>     if int(guess) == number:
>>>         break
>>> if int(guess) == number:
>>>     print (('Good job, {0}! You guessed my number in. {1} guesses! ').format(name,guesses_made))
>>> else:
>>>     print(('Nope. The number I was thinking of was {0}').format(number))
Hello! What is your name?
Jim
Well, Jim, I am thinking of a number between 1 and 20.
Take a guess:  3
Your guess is too high.
Take a guess:  2
Your guess is too high.
Take a guess:  1
Good job, Jim! You guessed my number in. 3 guesses!

1.5.2. 示例二:

>>> import random
>>> guesses_made = 0
>>> name = input('Hello! What is your name?\n')
>>> number = random.randint(1,20)
>>> print ('Well, {0}, I am thinking of a number between 1 and 20.'.format(name))
>>> while int(guesses_made) < 6:
>>>     guess = input('Take a guess: ')
>>>     guesses_made += 1
>>>     if int(guess) < number:print (' Your guess is too low.')
>>>     if int(guess) > number:print  ('Your guess is too high.')
>>>     if int(guess) == number:break
>>> if int(guess) == number:print ( ('Good jobr {0}! You guessed my number in {1} guesses! '). format(name, guesses_made))
>>> else:print  (('Nope. The number I was thinking of was {0}').format(number))
Hello! What is your name?
hui
Well, hui, I am thinking of a number between 1 and 20.
Take a guess: 9
 Your guess is too low.
Take a guess: 13
Your guess is too high.
Take a guess: 12
Your guess is too high.
Take a guess: 11
Good jobr hui! You guessed my number in 4 guesses!

看了上面两个例子,相信很多读者都倾向于阅读第一个例子,这就是代码布局和排版带给我们的最直观的感受(注意:本书其他章节的例子为了尽量使代码占用更少的篇幅,采取了第二种排版形式,但在实际项目开发中更推荐第一种)。和其他语言一样,Python代码布局也有一些基本规则可以遵循。

1)在一组代码表达完一个完整的思路之后,应该用空白行进行间隔。如每个函数之间,导入声明、变量赋值等。通俗点讲就是不要在一段代码中说明几件事。 推荐在函数定义或者类定义之间空两行,在类定义与第一个方法之间,或者需要进行语义分割的地方空一行。

如示例-在import声明和变量赋值之间插入了空行。

但读者需要注意的是:空行是在不隔断代码之间内在联系的基础上插入的,也就是说有关联的代码还是需要保持紧凑、连续。 在示例一中,如果你在if和else之间插入空行就显得非常没有必要,就像下面的代码:

>>> if int(guess) == number:
>>>     print  ('Good job, {0} I You guessed my number in {1} guesses!'. format (name, guesses_made))
>>>
>>>
>>> else:
>>>     print  ('Nope. The number I was thinking of was {1}'.format(number))
Good job, Jim I You guessed my number in 3 guesses!

2)尽量保持上下文语义的易理解性。如当一个函数需要调用另一个函数的时候,尽量 将它们放在一起,最好调用者在上,被调用者在下。例如下面的代码:

>>> def A ():
>>>     B()
>>> def B ():
>>>     pass

3)避免过长的代码行,每行最好不要超过80个字符。以每屏能够显示完整代码而不需要拖动滚动条为最佳,超过的部分可以用圆括号、方括号和花括号等进行行连接,并且保持行连接的元素垂直对齐。例如下面的代码:

>>> x=('this is a very long string it is '
>>>   'used for testing line limited characters')
>>> print (x)
this is a very long string it is used for testing line limited characters

def Draw_Line (ponitX1, pointY1, pointX2=1 , pointY2=2, color= 'green', width=2, style='bold'):

4)不要为了保持水平对齐而使用多余的空格,其实使阅读者尽可能容易地理解代码所要表达的意义更重要。如下列代码的主要目的是賦值,为了可以保持对齐往往会造成“喧宾夺主”。

>>> X =                        5
>>> year =                  2013
>>> name =                  "Jam"
>>> d2 = {' spam':  2,"eggs ": 3}

同时也不要在一行有多个命令,如不要将 X=1;Y=2; 直接写在一行中。

5)空格的使用要能够在需要强调的时候警示读者,在疏松关系的实体间起到分隔作用,而在具有紧密关系的时候不要使用空格。具体细节如下:

  • 二元运算符(赋值( = ),比较( ==<> , != ,,<> <=>=in , not inis , is not )、 布尔运算( andor , not ))的左右两边应该有空格,如 x == 1

  • 逗号和分号前不要使用空格。

推荐: if x == 4 : print(x, y); x, y = y, x

不推荐:: if x == 4 : print( x , y ) ; x , y = y ,x

  • 函数名和左括号之间、序列索引操作时序列名[]之间不需要空格,函数的默认参数两侧不需要空格。

  • 强调前面的操作符的时候使用空格,如 -2 - 5 (在 -25 之间的减号前后需要添加 空格)、 b*b + a*c (在加号前后需要添加空格)。