首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

这样来比喻会更容易理解Python变量

The best way to learn a programming language is to write a lot of code and read a lot of code.

我们说过,程序就是下达给计算机的一系列指令。但是,几乎所有真正有用或者有意思的程序都还有一些别的特征:

都有输入(input)

都会处理(process)输入

都会产生输出(output)。

我们可以回顾在上一篇推送中,你的第一个Python程序,它并没有任何输入或处理。正因为这样,那个程序没有太大意思。

而在第二个程序猜数游戏中就有意思多了,因为它全具备了有意思程序的特征:

输入:玩家键入的数,也就是他猜的数。

处理:程序检查玩家猜的数,并统计已经猜过几次。

输出:程序最后打印的消息

形象的说,在一个视频游戏中,输入是来自操纵杆或游戏控制器的信号,处理是程序确定你是否跳到目标格子、避开子弹、顺利过关或者做其他活动,输出是屏幕上显示的图形和音响或耳机传出的声音。

在这里,你一定要把输入、处理和输出这三个特征记住。

这么说,计算机需要输入,不过它会怎么处理这些输入呢?为了处理输入,计算机会把这些输入以及程序本身保存在它的内存(memory)中。

你可能听说过计算机内存,不过这到底是什么意思呢?

计算机其实只是一大堆开关。而内存就像是放在同一个位置上的一组开关。一旦以某种方式设置了这些开关,它们就会一直保持那种状态,直到你做出改变,也就是说它们会记住你原先的位置。

当然,你可以写(write)内存,也就是设置开关。也或者读(read)内存,查看开关如何设置。

但是我们怎么告诉Python要把一个东西放在内存中的某个位置呢?另外,放在那里之后,又怎么再把它找回来呢?

在Python中,如果希望程序记住某些东西,所要做的就是给这个“东西”起一个名字(name)。Python会在计算机的内存中为这个“东西”留出位置,可能是数字、文本、图片或者音乐。下次你要使用时,只需要使用这个名字。

名字的研究

下面我们还是在IDLE交互模式中使用Python。

回到Python Shell窗口,在提示符后面键入:

记住>>>是Python显示的提示符。你只需要键入它后面的内容,然后按回车。你会看到下面的结果:

你刚才创建了一个由字母“Mr. Morton”组成的东西,并且给它起了一个名字Teacher。

其中等号(=)告诉Python要指派或者“让……等于……”。这里我们把名字Teacher指派给字母序列“Mr. Morton”。

把一个东西指派给一个名字时(如把“Mr. Morton”指派给Teacher),它会存储在内存中,称为变量(variable)。在大多数编程语言中,都把这称为“把值存储在变量中”。名字其实就是变量。

在计算机内存中的某个位置,字母序列“Mr. Morton”已经存在。你不需要准确地知道它们到底在哪里。只需要告诉Python这个字母序列的名字是Teacher,从现在开始就要通过这个名字来引用这个字母序列就好了。

其实,你可以这么想,名字就像标签或者是便利贴,你可以用它来标识存储在计算机内存上的东西,并随时使用这些标签查看这个东西。

同时,你也可能发现了:

这个指令并没有打印出“Teacher”。

其实,在一个东西两边加上引号时,Python会按字面来处理它。它会把引号里的内容原样打印出来。如果没有加引号,Python就必须明确这个东西到底是什么,这可能是数字(如5)、表达式(比如5+3)或者名字(如Teacher)。由于我们先给Teacher指派了的(即“=”)“Mr. Morton”,所以Python会打印这个名字里的内容“Mr. Morton”。

如果我之前没有给名字指派了的(即“=”)东西,那么Python会出现打印错误,如下面代码:

这就像有人在说,请写下你的地址,你肯定不会这样写:

你可能会这样写:

如果写成“你的地址”,就是在按字面看这句话。

除非加上引号,如有人在说,请写下“你的地址”,这时,你当然是写:

下面来看另一个例子:

有引号时,Python会直接照你所说显示输出:67+34。

没有引号时,Python把67+28处理为一个算术表达式,它会计算这个表达式。

Python要确定需要多少内存来存储这些字母,以及要使用哪一部分内容。要获取信息(取回信息),只需要再使用同样的名字。我们使用print关键字并提供名字,这会在屏幕上显示具体的内容(如数字或文本)。

当然除了字母,还可以为其他内容创建名字(变量),如对数值指定名字。

下面我们用名字(变量)来完成这个例子:

在这里,我们创建了两个名字First和Second。数字5赋给名字(变量)First,数字3赋给名字(变量)Second。然后用print把这两个数的和打印出来。

同一个东西可以有多个名字(变量),可以试试这个指令:

这就像在同一个东西上贴两个标签。一个标签写着YourTeacher,另一个标签写着MyTeacher,不过它们都贴在“Goodyear”这个东西上。

如果把名字(变量)MyTeacher改成“Mrs. Tysick”这个东西上,YourTeacher也会改成“Mrs. Tysick”吗?

我们在刚才的指令例子下,继续写指令,如下:

实际上YourTeacher并不会改成“Mrs. Tysick”。这只是创建了一个新的东西“Mrs. Tysick”,并把标签MyTeacher从“Goodyear”上撕掉,然后贴到“Mrs. Tysick”上。这时,你仍然有两个不同的名字(两个标签),不过现在它们分别贴在两个不同的东西上,而不再贴在同一个东西上了。

名字有多“可变”

变量之所以叫“变量”是有原因的,就因为它们是可变的。但你要注意,这里是指你可以改变赋给(指派)它们的值。在Python中,这就要创建一个与原先不同的新东西,并把旧标签(名字)贴到这个新东西上。

我们看看下面的例子:

我们创建了一个新东西“Mr. Smith”,并把它命名为Teacher。我们的标签从原来的值(“Mr. Morton”)上取下来,贴到了这个新东西“Mr. Smith”上。

不过,原来的“Mr. Morton”去哪了呢?

应该记得,一个东西可以有多个名字(上面可以贴多个标签)。如果“Mr. Morton”上还有其它标签,那么它还在计算机的内存里。不过,如果它上面再没有任何标签了,Python就会发现再没有人需要它了,所以会把它从内存中删除。

还有一点很重要,这里并没有真的把“Mr. Morton”改成“Mr. Smith”。我们只是把标签从一个东西移到另一个东西上(重新指派名字)。

Python中有些东西(如数字和字符串)是不能改变的。你可以把它们的名字重新指派到其他东西上(就像我们刚才所做的一样),但是并不能对原先的东西做任何改变。

名字的规则

你可以把变量取名为喜欢的作任名字,名字长短由你来定,但里面只可以有字母和数字,还有下划线(_)。

下面是关于变量名(也称为标识符)的规则:

必须以一个字母或一个下划线字符开头。扣面可以使用字母、数字或下划线字符的序列,长度不限。

字母可以是大写或小写,大小写是不同的。也就是说,Ab不同于aB。

数字可以是从0到9(包括0和9)的任意数字字符。

除了字母、数字和下划线字符,不能使用其他字符。空格、标点符号和其他字符在变量名中都是不允许的:

~ ! # ¥ % …… — * ` , . / ; ' [ ] \ < > ? : " { } ( ) + -

唯一允许出现的特殊字符是下划字符(_)。

下面是一些合法变量名的例子:

my_answer

answer23

answer_23

YourAnswer

yourAnswer

o2o

youAndMe(驼峰命名,除了第一个单词都为小写外,其它每个单词的第一个字母大写,之后字母都小写)

下面是一些不合法变量名的例子:

23answer(变量名不能以数字开头)

your-answer(不允许有连字符)

my answer(不允许有空格)

最后,我们要告诉你的是:

建议你不要在变量名的开始和末尾使用下划线字符(_),虽然它也是合法的。但在Python中,有些情况,一个标识符开始和末尾使用下划线字符会有特殊的含义。所以要避免这样的使用:_first_numbe,student_name_,_my_apple_

使用容易记的变量名,尽可能使用能够说明用途的名字,可以告诉你变量要用来做什么的。

专业的Python程序员给变量命名时几乎总是以小写字母开头。因为我们使用编程语言是Python,所以这本教程后面都会遵循这种风格。

数字和字符串

目前为止,我们已经为字母(文本)和数字创建了变量。不过,在前面的加法例子中,Python怎么知道我们指的是数字5和3,而不是字符“5”和“3”呢?就像前面这句话一样,正是引号带来了差别。

字符或字符序列(字母、数字或标点符号)称为一个字符串(string)。要告诉Python你在创建一个字符串,就要在字符两边加上引号。至于使用单引号(‘’)还是双引号(“”),Python并不太挑剔。不过,字符串的开头和结尾必须使用同种类型的引号,要么都是双引号,要么都是单引号。

如果键入一个数字而没有加引号,Python就会知道这表示数值,而不是字符。可以看看下面这个例子:

当然,还可以把由字母构成的字符串“加”在一起,如:

两个字符串会紧紧地拼接在一起,注意它们之间没有空格。

长字符串

如果有时我们希望得到一个跨多行的字符串,这时,必须使用一种特殊的字符串,称为三重引号字符串。这种字符串以3个引号开头和结尾,所用的引号可以是双引号(“““ ”””)也可以是单引号(‘‘‘ ’’’),不过,必须使用同种类型的引号,要么都是双引号,要么都是单引号。如下面这样的:

如果希望多行文本显示在一起,而且你不希望每一行都使用一个单独的字符串,在这种情况下,三重引号字符串就非常有用了。

END

回顾

如何使用变量在计算机内存中“记住”或保存信息。

变量也叫做“名字”或“变量名”

变量可以是不同类型的东西,如数字和字符串。

测试题

如何告诉Python变量是字符串(字符)而不是数字?

一旦创建一个变量,能不能改变赋给这个变量的值?

变量名TEACHER与TEACHEr相同吗?

对Python来说,‘Blah’与“Blah”一样吗?

对Python来说,‘4’是不是等同于4?

下面哪个变量名不正确?为什么?

Teacher2

2Teacher

teacher_25

TeaCher

“10”是数字还是字符串?

动手试一试

创建一个变量,并给它赋一个数值(任何数值都行)。然后用print显示这个变量。

改变这个变量,可以用一个新值替换原来的值,或者将原来的值增加某个变量,使用print显示这个新值。

创建另一个变量,并赋给它一个字符串(某个文本)。然后使用print显示这个变量。

像上一章一样,在交互模式中让Python计算一周有多少分钟。不过,这一次要使用变量。以daysPerWeek(每周天数)、hoursPerDay(每天小时数)、和minutesPerHour(每小时分钟数)为名分别创建变量(或者也可以用自己取的变量名),然后将它们相乘。

人们总是说没有足够的时间做到尽善尽美。如果一天有26个小时,那么一周会有多少分钟呢?(提示:改变hoursPerDay变量)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180207G1D80900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券