数字类型实战——变量和基本表达式

未匹配的标注

首先,练习一些基本的数学。在下面的交互中,首先给两个变量(ab)赋值整数,这样稍后就能在更大的表达式中使用它们。变量只是用来跟踪程序内信息的名称——被你或Python创建。在下一章将会更多地探讨它,但在Python中:

  • 变量在首次被赋值时被创建。
  • 当使用在表达式中时变量被其值代替。
  • 在变量可以被使用在表达式中前必须先赋值。
  • 变量引用对象且从来不提前声明。

换句话说,这些赋值会让变量ab自动生成:

% python
>>> a = 3 # 被创建的名称:不提前声明
>>> b = 4

这里还使用了注释。回忆一下,在Python代码中,在#号后并持续到行尾的文本被认为是注释且被Python忽略。注释是一种为代码编写人类可读的文档的方法,也是编程的一个重要部分。在大多数本书的例子中都添加了注释来帮助解释代码。在本书下一部分,将学习一个相关的但更实用的特性——文档字符串——它将注释文字附加到对象上,所以在代码加载后可用。

然而,因为交互地输入的代码是临时的,所以通常不会在这个环境下写注释。如果跟着例子操作,就不需要键入从#开始到行尾的任何注释;这样运行的语句是不需要写注释的。

现在,在一些表达式中使用新的整数对象。在这时,ab的值还是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)

技术上讲,这里被回显的结果是两个值组成的元组,因为在提示符键入的行包含被逗号分隔的两个表达式;这是为什么结果被显示在小括号内(后面会介绍更多关于元组的知识)。注意这里表达式可以工作是因为其中的变量ab已经被赋值。如果使用一个还未赋值的不同变量,Python会报错,而不是填上某个默认值:

>>> c * 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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。再说一次,请关注正式的除法细节介绍。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~