PDF源文件地址 :
[自述:这一章内容不多,但是由于时间关系,翻译完成这一章也花了我一周的时间,跟我预想的进度相比已经落后了,得加油了,要不然翻译完整本书就要到猴年马月了。目前离翻译完成还有17章!!!]
第二章 变量, 表达式和语法2.1 值和类型
值是程序工作的基本要素,如字符串“Hello,World!”或数字1、2等等。
这些值属于不同类型:2是一个整数,而“Hello,World!”是字符串,之所以这么命名,是因为它包含了一“串”字符。您/解释器可以识别字符串,那是因为它是用一对引号括起来的。另外你如果不确定值的类型,解释器的type函数可以告诉你。
毫无疑问,字符串属于str类型,整数是int类型。
>>> type('Hello, World!')
<type 'str'>
>>> type(17)
<type 'int'>
需要注意的是,有小数点的数字称之为float型,即“浮点”格式表示的数字。
>>> type(3.2)
<type 'float'>
那如何区分‘17’和‘3.2’这样的值呢?它们看起来像数字,但是它们像字符串一样被引号括起来了。
>>> type('17')
<type 'str'>
>>> type('3.2')
<type 'str'>
因此,它们是字符串。
当你输入一个大整数,你可能会用千分号隔开来表示数字1,000,000,这在Python里面是非法的,但是在实际应用中却是合法的。
>>> 1,000,000
(1, 0, 0)
这当然不是我们所期望的结果!Python把千分号隔开的整数1,000,000解释为一个整数序列。这是本书的第一个语义错误的例子:代码运行没有产生错误,但结果却是“不对”的。
2.2 变量
编程语言最强大的特性之一就是变量赋值的能力,变量即值引用。
用赋值语句创建变量并给变量赋值:
>>> message = 'And now for something completely different'
>>> n = 17
>>> pi = 3.1415926535897932
以上3条赋值语句,第一个建立一个message新变量并赋值了一个字符串,第二个把n赋值为整数17,第三个把π的近似值赋值给变量pi。
我们在纸上演示给变量赋值的时候,通常是先写下变量名,然后用一个箭头指向变量的值,这种类型的图例我们称之为状态图,因为状态图可以标示每个变量的状态。上面例子的状态图如图2.1所示。
图2.1
变量类型即值引用类型。
>>> type(message)
<type 'str'>
>>> type(n)
<type 'int'>
>>> type(pi)
<type 'float'>
2.3 变量名和关键字
程序员通常会选择有具体含义的名字来给变量命名——用来记录变量的作用。
变量名的长度没有限制,可以包含数字和字母,但是必须以字母开头,推荐首字母小写,当然首字母大写也是合法的变量名(后面你会明白其原因)。
定义变量名也可以使用下划线“_”,通常用在有多个单词的变量名,例如my_name、airspeed_of_unladen_swallow等。
如果你定义一个非法的变量名,你将会得到一个语法错误:
>>> 76trombones = 'big parade'
SyntaxError: invalid syntax
>>> more@ = 1000000
SyntaxError: invalid syntax
>>> class = 'Advanced Theoretical Zymurgy'
SyntaxError: invalid syntax
变量名 76trombones 不是以字母开头,而 more@ 则包含了非法字符“@”,但是class为什么也是错误的呢?那是因为class 是Python的一个关键字。因为解释器运用关键字来识别程序结构,因此关键字是不能用来作为变量名使用的。
Python 2版本有31个关键字:
and
del
from
not
while
as
elif
global or
with
assert else
if
pass
yield
break except import print
class exec
in
raise
continue finally is
return
def
for
lambda try
而在Python 3版本中 exec 不再是关键字,但是多了一个nonlocal 关键字。
因此,请牢记这些关键字,当解释器报变量名错误的时候你可以检查变量名是否跟关键字重复了。
2.4 运算符和运算
像表示加法和乘法的运算符是特殊字符,将运算符应用到计算中叫做运算。