数字类型实战——变量和基本表达式 | 第二部分 类型与操作 —— 第 5 章: 数字类型 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-金年会app官方网
首先,练习一些基本的数学。在下面的交互中,首先给两个变量(a
和b
)赋值整数,这样稍后就能在更大的表达式中使用它们。变量只是用来跟踪程序内信息的名称——被你或python创建。在下一章将会更多地探讨它,但在python中:
- 变量在首次被赋值时被创建。
- 当使用在表达式中时变量被其值代替。
- 在变量可以被使用在表达式中前必须先赋值。
- 变量引用对象且从来不提前声明。
换句话说,这些赋值会让变量a
和b
自动生成:
% python
>>> a = 3 # 被创建的名称:不提前声明
>>> b = 4
这里还使用了注释。回忆一下,在python代码中,在#
号后并持续到行尾的文本被认为是注释且被python忽略。注释是一种为代码编写人类可读的文档的方法,也是编程的一个重要部分。在大多数本书的例子中都添加了注释来帮助解释代码。在本书下一部分,将学习一个相关的但更实用的特性——文档字符串——它将注释文字附加到对象上,所以在代码加载后可用。
然而,因为交互地输入的代码是临时的,所以通常不会在这个环境下写注释。如果跟着例子操作,就不需要键入从#
开始到行尾的任何注释;这样运行的语句是不需要写注释的。
现在,在一些表达式中使用新的整数对象。在这时,a
和b
的值还是3和4。当它们被用在表达式中时,像这样的变量就被其值代替,且当交互式操作时,表达式结果会被立刻回显:
>>> a 1, a − 1 # 加法 (3 1), 减法 (3 − 1)
(4, 2)
>>> b * 3, b / 2 # 乘法 (4 * 3), 除法 (4 / 2)
(12, 2.0)
>>> a % 2, b ** 2 # 模运算符% (余数), 幂 (4 ** 2)
(1, 16)
>>> 2 4.0, 2.0 ** b # 混合类型的转换
(6.0, 16.0)
技术上讲,这里被回显的结果是两个值组成的元组,因为在提示符键入的行包含被逗号分隔的两个表达式;这是为什么结果被显示在小括号内(后面会介绍更多关于元组的知识)。注意这里表达式可以工作是因为其中的变量a
和b
已经被赋值。如果使用一个还未赋值的不同变量,python会报错,而不是填上某个默认值:
>>> c * 2
traceback (most recent call last):
file "", line 1, in
nameerror: name 'c' is not defined
在python中不必提前声明变量,但在使用它们前必须至少赋值一次。在实践中,这意味着必须在可以给计数器进行加法操作前先将其初始化为0,在可以对列表进行追加操作前先将其初始化为一个空列表等等。
下面两个稍大的表达式用来显示操作符分组和关于转换的更多知识,且提前了解了python 3系列和2系列中除法操作符的不同:
>>> b / 2 a # 和 ((4 / 2) 3) 相同 [在 2系列中使用 2.0]
5.0
>>> b / (2.0 a) # 和 (4 / (2.0 3)) 相同[在2.7前使用 print]
0.8
在第一个表达式中,没有小括号,所以python 自动根据其优先级规则对组件进行分组——因为/
在表5-2中比
更低,所以它绑定得更紧且先求值。结果就好像代码右边的注释中显示的表达式被小括号包裹住那样。
而且,注意在第一个表达式中所有数字都是整数。因此,python 2系列的 /
执行整数除法和加法,且会给出结果为5,然而python 3系列的 /
执行真正的除法,它总是保留小数的余数且给出显示的5.0的结果。如果要在3系列中获得2系列的整数除法,则将其编码为 b // 2 a
;如果要在2系列中得到3系列的真正的除法,则编码为 b / 2.0 a
(稍后会讨论更多关于除法的知识)。
在第二个表达式中,小括号被添加到
的外围来强制python先对其求值(也就是在 /
前)。还可以通过添加小数点2.0
来让其中一个运算对象为浮点数。因为类型是混合的,python在执行
前,会将被a引用的整数转换为一个浮点数(3.0)。如果在此表达式中的所有数字都是整数,整数除法(4/5)将在python 2系列中产生被截断的整数0,但在3系列中会产生显示的浮点数0.8。再说一次,请关注正式的除法细节介绍。