Quantcast
Viewing all articles
Browse latest Browse all 9596

《Think Python 2e》最新版中文翻译 第二章:变量、表达式和语句

编程语言最强大的特性之一,是操作 变量 的能力。变量是指向某个值的名称。

赋值语句

赋值语句(assignment statement)会新建变量,并为这个变量赋值。

>>> message = 'And now for something completely different' >>> n = 17 >>> pi = 3.141592653589793

这个例子进行了三次赋值。 第一次将一个字符串赋给一个叫message的新变量; 第二次将整型数17赋给n; 第三次将 π π 的(近似)值赋给pi。

在纸上表示变量的一个常见方法,是写下变量名,并用箭头指向变量的值。 这种图被称为 状态图(state diagram) ,因为它展示了每个变量所处的状态(可以把其看成是变量的心理状态)。 图2-1展示了前面例子的结果。


Image may be NSFW.
Clik here to view.
《Think Python 2e》最新版中文翻译 第二章:变量、表达式和语句

图2-1:状态图。

变量名

程序员通常为变量选择有意义的名字―它们可以记录该变量的用途。

变量名可以任意长。它们可以包括字母和数字,但是不能以数字开头。 使用大写字母是合法的,但是根据惯例,变量名只使用小写字母。

下划线 _ 可以出现在变量名中。 它经常用于有多个单词的变量名,例如 my_name 或者 airspeed_of_unladen_swallow 。

如果你给了变量一个非法的名称,解释器将抛出一个语法错误:

>>> 76trombones = 'big parade' SyntaxError: invalidsyntax >>> more@ = 1000000 SyntaxError: invalidsyntax >>> class = 'Advanced Theoretical Zymurgy' SyntaxError: invalidsyntax

76trombones是非法的,因为它以数字开头。more@是非法的,因为它包含了一个非法字符@。 但是,class错在哪儿了呢?

原来,class是python的 关键字(keywords) 之一。 解释器使用关键字识别程序的结构,它们不能被用作变量名。

Python 3有以下关键词:

<spanclass="kc">False</span><spanclass="k">class</span><spanclass="nc">finally</span><spanclass="ow">is</span><spanclass="k">return</span> <spanclass="kc">None</span><spanclass="k">continue</span><spanclass="k">for</span><spanclass="k">lambda</span><spanclass="k">try</span> <spanclass="kc">True</span><spanclass="k">def</span><spanclass="nf">from</span><spanclass="k">nonlocal</span><spanclass="k">while</span> <spanclass="ow">and</span><spanclass="k">del</span><spanclass="k">global</span><spanclass="ow">not</span><spanclass="k">with</span> <spanclass="k">as</span><spanclass="k">elif</span><spanclass="k">if</span><spanclass="ow">or</span><spanclass="k">yield</span> <spanclass="k">assert</span><spanclass="k">else</span><spanclass="kn">import</span><spanclass="nn">pass</span> <spanclass="k">break</span><spanclass="k">except</span><spanclass="ow">in</span><spanclass="k">raise</span>

你没有必要背诵上面的关键词。大部分的开发环境会用不同的颜色区别显示关键词;如果你不小心使用关键词作为变量名,你肯定会发现的。

表达式和语句

表达式(expression)是值、变量和运算符的组合。 值自身也被认为是一个表达式,变量也是,因此下面都是合法的表达式:

<spanclass="gp">>>> </span><spanclass="mi">42</span> <spanclass="go">42</span> <spanclass="gp">>>> </span><spanclass="n">n</span> <spanclass="go">17</span> <spanclass="gp">>>> </span><spanclass="n">n</span> <spanclass="o">+</span> <spanclass="mi">25</span> <spanclass="go">42</span>

当你在提示符后输入表达式时,解释器会 ** 计算(evaluate)**该表达式,这就意味着解释器会求它的值。在上面的例子中,n的值是17,n + 25的值是42。

语句(statement)是一个会产生影响的代码单元,例如新建一个变量或显示某个值。

<spanclass="gp">>>> </span><spanclass="n">n</span> <spanclass="o">=</span> <spanclass="mi">17</span> <spanclass="gp">>>> </span><spanclass="nb">print</span><spanclass="p">(</span><spanclass="n">n</span><spanclass="p">)</span>

第一行是一个赋值语句,将某个值赋给了n。第二行是一个打印语句,在屏幕上显示n的值。

当你输入一个语句后,解释器会 执行(execute) 这个语句,即按照语句的指令完成操作。一般来说,语句是没有值的。

脚本模式

到目前为止,我们都是在 交互模式(interactive mode) 下运行Python,即直接与解释器进行交互。交互模式对学习入门很有帮助,但是如果你需要编写很多行代码,使用交互模式就不太方便了。

另一种方法是将代码保存到一个被称为 脚本(script) 的文件里,然后以 脚本模式(script mode) 运行解释器并执行脚本。按照惯例,Python脚本文件名的后缀是.py。

如果你知道如何在本地电脑新建并运行脚本,那你可以开始编码了。否则的话,我再次建议使用PythonAnywhere。我在 http://tinyurl.com/thinkpython2e 上贴出了如何以脚本模式运行解释器的指南。

由于Python支持这两种模式,在将代码写入脚本之前,你可以在交互模式下对代码片段进行测试。不过,交互模式和脚本模式之间存在一些差异,可能会让你感到疑惑。

举个例子,如果你把Python当计算器使用,你可能会输入下面这样的代码:

<spanclass="gp">>>> </span><spanclass="n">miles</span> <spanclass="o">=</span> <spanclass="mf">26.2</span> <spanclass="gp">>>> </span><spanclass="n">miles</span> <spanclass="o">*</span> <spanclass="mf">1.61</span> <spanclass="go">42.182</span>

第一行将一个值赋给miles,但是并没有产生可见的效果。 第二行是一个表达式,因此解释器计算它并将结果显示出来。 结果告诉我们,一段马拉松大概是42公里。

但是如果你将相同的代码键入一个脚本并且运行它,你得不到任何输出。 在脚本模式下,表达式自身不会产生可见的效果。虽然Python实际上计算了表达式,但是如果你不告诉它要显示结果,它是不会那么做的。

<spanclass="n">miles</span> <spanclass="o">=</span> <spanclass="mf">26.2</span> <spanclass="nb">print</span><spanclass="p">(</span><spanclass="n">miles</span> <spanclass="o">*</span> <spanclass="mf">1.61</span><spanclass="p">)</span>

这个行为开始可能有些令人费解。

一个脚本通常包括一系列语句。 如果有多于一条的语句,那么随着语句逐个执行,解释器会逐一显示计算结果。

例如,以下脚本

<spanclass="nb">print</span><spanclass="p">(</span><spanclass="mi">1</span><spanclass="p">)</span> <spanclass="n">x</span> <spanclass="o">=</span> <spanclass="mi">2</span> <spanclass="nb">print</span><spanclass="p">(</span><spanclass="n">x</span><spanclass="p">)</span>

产生的输出结果是

<spanclass="mi">1</span> <spanclass="mi">2</span>

赋值语句不产生输出。

在Python解释器中键入以下的语句,看看他们的结果是否符合你的理解:

<spanclass="mi">5</span> <spanclass="n">x</span> <spanclass="o">=</span> <spanclass="mi">5</span> <spanclass="n">x</span> <spanclass="o">+</span> <spanclass="mi">1</span>

现在将同样的语句写入一个脚本中并执行它。输出结果是什么? 修改脚本,将每个表达式变成打印语句,再次运行它。

运算顺序

当一个表达式中有多于一个运算符时,计算的顺序由 运算顺序(order of operations) 决定。 对于算数运算符,Python遵循数学里的惯例。 缩写 PEMDAS 有助于帮助大家记住这些规则:

括号( P arentheses)具有最高的优先级,并且可以强制表达式按你希望的顺序计算。 因为在括号中的表达式首先被计算,那么2 * (3-1)的结果是4,(1+1)**(5-2)的结果是8。 你也可以用括号提高表达式的可读性,如写成(minute * 100) / 60,即使这样并不改变运算的结果。 指数运算( E xponentiation)具有次高的优先级,因此1 + 2**3的结果是9而非27, 2 * 3**2的结果是18而非36。 乘法( M ultiplication)和除法( D ivision)有相同的优先级, 比加法( A ddition)和减法( S ubtraction)高,加法和减法也具有相同的优先级。 因此2*3-1是5而非4,6+4/2是8而非5。 具有相同优先级的运算符按照从左到右的顺序进行计算(除了指数运算)。 因此表达式degr

Viewing all articles
Browse latest Browse all 9596

Trending Articles