唠唠python(3) -- 保存计算过程

昨天的文章,我们学会了跟计算机进行简单的语言交流和用计算机来做简单的算术。我们发现,计算机用来做简单的算术还是很方便的。但不知你是否注意到了,每次当我们退出翻译器时,我们之前的数据就消失了。

消失比错误更可怕,它代表着我们已不能确定对错,而且就算错了,错误的根源也无从找起。

多可怕!

奇怪的翻译器

在上一篇文章里,我们通过实验,得知,在python翻译器里输入"hello",翻译器给我们回复了一个'hello'。有的朋友可能已经注意到了,输出的hello两边有一对'

1
2
3
>>> "hello"
'hello'
>>>

不对呀,我们输入的是",结果里带的却是'?!

先别慌,我们说在python里,一句许两边要带",实际上,'"在python里面功能是一样的。没错,"hello"'hello'并没有什么本质的区别。

那现在问题来了:

  1. 为什么python的输出里要带一对'呢?
  2. 我就是不想看到这个',怎么办?

跟计算机打招呼做算术题是一码事

没错,在python翻译器看来,在对待这两者时,处理方式是一样的。

想想我们在做1+1时,翻译器做了什么?它把我们输入的文字翻译给计算机,并将结果显示给我们。

那当我们输入"hello"时,翻译器又做了什么?它把我们输入的文字翻译给计算机,并将结果显示给我们。

看到了吗,这两个答案其实是一致的。不同之处在于值本身,一个值是一句话,而另一个值是一个数字。

试想,如果把"hello"换成"1",而翻译器显示了一个1,我们就不知道这是一句话还是一个数字了。所以,结果,跟我们的猜想一致。

1
2
3
>>> "1"
'1'
>>>

现在问题1的答案已经很清晰了,为什么python的输出里要带一对'呢?这代表求值的结果是一句话,而非一个数字或者其它什么。

主动地表达我们的意图

对,是时候表达我们的想法了。

之前,我们是把python翻译器当作一个计算器,对一句话的计算也好,对一个算术表达式的计算也罢。

对一句话求值,所得的结果是一句话。为了表明它是一句话,结果的两边加了一对'

现在,我们要对计算机提出更高的要求。我们不需要计算机帮我们对一句话求值,我们想直接把一句话显示到屏幕上。这也就是问题2的答案,显示意味着我们不再需要知道这是一句话或一个数字,而是想知道这个值表达的是什么。"1"1你都给我显示1就好了,我知道是什么意思。

1
2
3
>>> print "hello"
hello
>>>

我们告诉翻译器,帮我们显示一句话"hello",计算机显示给我们一个没有"hello

需要注意的是,这里的print "hello"仍然会求值并将值显示出来。但因为这里的值是空的,所以我们只看到了hello

hello是求值过程中产生的输出,而求值没有结果

保存我们的计算过程

前面说,我们有时需要查错,所以需要保存计算过程

保存计算过程还有一个更重要的意义,因为我们的目标,是让计算机帮我们更高效的工作,如果不能重复的使用我们之前使用过的计算过程,意味着工作不仅没有高效起来,反而更加低效了。

所以保存我们的计算过程,就显得十分之必要。

从前面我们输入过的代码来看(对,我们已经是在写代码了),代码的表现形式非常简单,都是文字,或者说文本。也就是说,只要我们把以上的代码记录到文本文件里面就完成了保存计算过程的目标。

保存计算过程就是这么简单。

不过这里还有几点需要补充说明一下:

  1. 对文件名的要求:文件名要以.py结尾,以表明文件里存放着用python语言写成的”小诗”或”文章”。如果你不知道什么名字好听,a.py或者b.py都是不错的选择。
  2. 执行时要注意,执行的结果,更遵循主动地表达我们的意图,而不是直接求值并显示值。这里可能不太好理解,在python翻译器里求值时,翻译器会直接显示求值结果,但是,当直接执行保存在文件里的代码时,求值结果不会再直接显示,而是需要我们使用前面提到的print来告诉计算机显示。

重复使用计算过程

我们先来实践一下保存我们的计算过程

还记得上一篇文章中提到的那个神密的黑色窗口吗。打开黑色窗口后,输入notepad a.py(windows)或nano a.py(其它系统)并回车,这会创建一个新的名为a.py的文件。打开文件后输入以下内容并保存。这样,我们的计算过程就被保存到了a.py这个文件。

1
print "hello"

接下来,我们就可以使用这个计算过程了。

在黑色窗口内输入python a.py并回车,即可看到类似我们之前的输出了。

1
2
C:\> python a.py
hello

这个命令跟之前请出翻译时使用的命令,唯一区别在于这里多了一个文件名。

只是显示一个"hello",未免显得单调乏味。但是实际上,这代表着我们已经可以完成一个简单系统hello的从开发到运行的整个过程了。

当然,这还远远不够。我们需要这个系统能接收用户的输入(有可能是按钮点击、文字输入或者游戏手柄按键输入等),并可以通过复杂的计算过程,最后得到我们想要的结果(有可能是一个处理过的excel文件,或者一张图片,一封邮件等)。

当然,丰富多样的输入,复杂计算,不同载体的输出,也都是十分简单的。想想我们输出hello的过程吧,与此大同小异,只是对一些新鲜事物更熟悉的过程。

下一篇,我们就来利用已经学过的知识,与计算机这个古板的老朋友一起合作,来抽象一部分我们繁琐的工作。