到目前介绍的几乎都是表达式, 在编程语言,或者说 Python 中还有一个概念是“语句” 。 前面已经涉及到基本的赋值语句了。
语句和表达式有何不同呢?可以这样想:表达式是一些东西,而语句是做一些事情。
例如,2 * 2
的结果是4,而 print(2 * 2)
打印4。
表达式和语句的行为很像,因此它们之间的界线可能并非那么明确。
2 * 2
4
print(2 * 2)
4
在交互式解释器中执行时,这两段代码的结果没有任何差别,
但这是因为解释器总是将表达式的值打印出来(打印的是 repr
表示的内容)。
然而,在Python中,情况并非都是这样的。
后面将介绍如何创建无需交互式解释器就能运行的程序。
仅将诸如 2 * 2
等表达式放在程序中不会有任何作用,但在程序中包含 print(2*2)
将打印结果 4
。
注意: print
实际上是一个函数(这将在本章后面更详细地介绍),因此前面说的 print
语句其实是函数调用。
在Python 2.x中, print
是一条语句,无需将要打印的内容作为参数放在圆括号内。
涉及赋值时,语句和表达式的差别更明显:鉴于赋值语句不是表达式,它们没有可供交互式解释器打印的值。
x = 3
执行赋值语句后,交互式解释器只是再次显示提示符,但发生了一些变化:有一个名为 x
的 新变量,与值 3
相关联。
可以说,这是所有语句的一个根本特征:执行修改操作。
例如,赋值语句改变变量,而 print
语句改变屏幕的外观。
无论在什么编程语言中,赋值语句都可能是最重要的语句,虽然这一点可能难以马上明白。 变量就像是临时“存储区”(类似于菜谱中的锅碗瓢盆),其真正威力在于无需知道它们存储的值就能操作它们。
例如,即便根本不知道 x
和 y
是什么,也知道 x * y
的结果为 x
和 y
的乘积。
因此,编写程序时,能以各种方式使用变量,而无需知道程序运行时它们将存储(指向)的值。
def echo_info():
str1 = ''
str2 = ''
str3 = str1 + str2
if str3:
print(str3)
else:
print(None)
count = 3 + 4 \
+ 6 + 9 \
+ 10 + 11
在 []
, {}
, 或 ()
中的多行语句,不需要使用反斜杠,比如定义一个列表。
lst = [1, 3, 4,
5, 5, 2,
7, 9, 10]
Python中的注释
如果多了解一些编程语言,就能够发现一个特别神奇的现象,所有的编程语言都允许写注释, 而在很多初学者眼中,注释并不是什么重要的东西,学习过程中几乎没有太多的关注。
但在实际工作中,注释是非常重要的,甚至有观点认为注释是程序的一部分,为什么在专业人士眼中, 代码注释如此重要呢?其实原因很简单,今天写的代码,7天以后自己都不认识了。
就是这么不可思议,但又很合理,还记得7天前晚饭吃的是什么?代码,是大脑里逻辑的一种技术呈现, 彼时彼刻,所思所想浓缩成了一行行的代码,但是7天以后,这一行行代码却很难反向转换成大脑里的逻辑, 这就是写注释的必要所在。 注释的目的是解释代码在做什么,关键性的信息可以在回顾代码时回想起更多更完整的信息。 对于初学者,给代码写注释,更有助于理清代码逻辑,让思维更严谨。
注释的写法
单行注释
单行注释以 #
开头,根据规范,注释内容与 #
间隔一个空格。
记录数量
count = 0
def recursion(number):
"""
计算number的阶乘
:param number:
:return:
"""
if number == 1:
return 1
next_recursion = recursion(number-1)
return next_recursion*number
if __name__ == '__main__':
print(recursion(4))
24
或者
def recursion(number):
'''
计算number的阶乘
:param number:
:return:
'''
该编写什么样的注释
编写注释的主要目的是阐述代码要做什么,以及是如何做的。 在开发项目期间,对各个部分如何协同工作了如指掌,但过段时间后,有些细节可能不记得了。 当然,总是可以通过研究代码来确定各个部分的工作原理,但通过编写注释, 以清晰的自然语言对解决方案进行概述,可节省很多时间。
要成为专业程序员或与其他程序员合作,就必须编写有意义的注释。 当前,大多数软件都是合作编写的,编写者可能是同一家公司的多名员工, 也可能是众多致力于同一个开源项目的人员。 训练有素的程序员都希望代码中包含注释,因此最好从现在开始就在程序中添加描述性注释。 作为新手,最值得养成的习惯之一是,在代码中编写清晰、简洁的注释。
如果不确定是否要编写注释,就问问自己,找到合理的解决方案前,是否考虑了多个解决方案。 如果答案是肯定的,就编写注释对解决方案进行说明吧。相比回过头去再添加注释,删除多余的注释要容易得多。
在大多数编程语言中,注释都是一项很有用的功能。本书前面编写的程序中都只包含Python代码, 但随着程序越来越大、越来越复杂,就应在其中添加说明,对解决问题的方法进行大致的阐述。 注释能够使用自然语言在程序中添加说明。
什么注释算是好注释,关于这个问题,没有标准答案,有人很抬杠的说代码是最好的注释,这等于没说, 正是因为写出好代码不是一件容易的事情,所以,才要写注释。 结合自身的工作经验认为,好的代码注释应该符合以下几个特点:
描述简洁,避免长篇大论
如果把一段代码注释写成了议论文,那岂不是喧宾夺主,注释应该简洁,减轻阅读负担。 注释内容要直观,比如给一个函数写注释,要简明的描述函数的功能和作用。
保留关键上下文信息
只有写代码的人才了解上下文信息,而对于维护代码的人来说,这些信息往往是缺失的,比如给一个函数写注释, 如果函数是一个功能函数,那么注释应该说清楚它的适用范围,如果是一个对外的接口, 那么应该说清楚目前谁在调用,入参需要注意的问题是什么。
保留这些上下文信息,可以让接手的人快速的了解这个函数,不至于到处去问人,
多记录为什么,少说是什么
和第一条遥相呼应,代码做了什么,简明扼要的介绍就可以了,但是为什么要这么做则需要多做些说明。
如果接手代码的人不清楚为什么要这么做,很可能会认为代码写的有问题,因为他不了解需求背景, 他不了解当初写代码时的考虑因素和限制条件, 所以,注释应当为后来人释疑,让维护代码的人大胆放心的使用,而不是质疑代码。