购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 变量和关键字

编程语言最强大的功能之一是操纵变量。变量(variable)是一个需要熟知的概念,如果你觉得数学让你抓狂,别担心,Python中的变量很好理解。变量基本上代表某个值的名字。

2.3.1 变量

变量指向各种类型值的名字,以后再用到这个值时,直接引用名字即可,不用再写具体的值。在Python中,变量的使用环境非常宽松,没有明显的变量声明,而且类型不是固定的。你可以把一个整数赋值给变量,如果觉得不合适,把字符串赋给变量也可以。

在Python中,等号(=)是赋值语句,可以把任意数据类型赋值给变量。

如果要定义一个名为xiaohong的变量,该怎么操作呢?输入如下:

>>> xiaohong='XiaoHong'
>>>

字符串必须以引号标记开始,并以引号标记结束。

此操作解释:xiaohong是我们创建的变量,=是赋值语句,XiaoHong是变量值,需要用引号标记。整句话的意思为:创建变量xiaohong并赋值为XiaoHong。

小萌疑惑了,怎么前面输入后按回车键就能输出内容,这里怎么跳到输入提示状态呢?别急,还记得前面讲的print()吗?print()是输出函数,看看这里,没有使用输出函数,屏幕上当然不会输出内容了。要输出内容应该怎么操作呢?我们尝试一下:

>>> print(xiaohong)
XiaoHong

不错,尝试成功了。但为什么小萌输入的是print(xiaohong),结果却输出XiaoHong呢?这就是变量的好处,可以只定义一个变量,比如xiaohong,把一个值赋给这个变量,比如XiaoHong,这样当我们输出xiaohong时,实际上输出的是XiaoHong。

在使用变量前需要对其赋值。没有值的变量是没有意义的,编译器也不会编译通过。例如,定义一个变量为abc,不赋任何值,输入及结果如下:

>>> abc
Traceback (most recent call last):
  File "<pyshell#33>", line 1, in <module>
    abc
NameError: name 'abc' is not defined

同一个变量可以反复赋值,而且可以是不同类型的变量,输入如下:

>>> a = 123
123
>>> a='ABC'
>>> print(a)
ABC

这种变量本身类型不固定的语言称为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值时类型不匹配就会报错。和静态语言相比,动态语言更灵活。

当不能确定变量或数据的类型时,可以借助解释器内置的函数type进行确认。在交互模式下可以如下输入:

>>> type('Hello,world!')
<class 'str'>

测试得到输入的结果类型是字符串类型(str)。

>>> type(100)
<class 'int'>

测试得到输入的结果类型是整型(int)。

>>> type(3.0)
<class 'float'>

测试得到输入的结果类型是浮点型(float)。

>>> a='test type'
>>> type(a)
<class 'str'>

测试得到输入的结果类型是字符串类型(str)。

>>> b=100
>>> type(b)
<class 'int'>

测试得到输入的结果类型是整型(int)。

>>> c=3.0
>>> type(c)
<class 'float'>

测试得到输入的结果类型是浮点型(float)。

只要是用双引号或单引号括起来的值,都属于字符串。交互模式下输入:

>>> type('test single quotes')
<class 'str'>
>>> type("test double quote")
<class 'str'>
>>> type("100")
<class 'str'>
>>> type("3.0")
<class 'str'>
>>> b=3
>>> type(b)
<class 'int'>
>>> b=100
>>> type(b)
<class 'int'>
>>> c=3.0
>>> type(c)
<class 'float'>

测试得到输入的结果类型都是字符串类型(str)。

注意不要把赋值语句的等号等同于数学中的等号。比如下面的代码:

a = 100
a = a + 200

小萌一脸疑问,a=a+200是什么等式啊?读书时不知道在这个等式上花费了多少脑细胞,可别再拿这个骗我了,我可是读过小学的。小萌啊小萌,计算机可不是人脑,也不需要遵循学校的知识,计算机有计算机的思考方式。在编程语言中,赋值语句先计算右侧的表达式a+200,得到结果300,再赋给变量a。由于a之前的值是100,重新赋值后,a的值变成300。我们通过交互模式验证,输入如下:

>>> a=100
>>> a=a+200
>>> print(a)
300

和我们所描述的结果一致。

理解变量在计算机内存中的表示也非常重要。当我们输入如下:

>>> a='ABC'

这时,Python解释器做了两件事情:

(1)在内存中创建了一个'ABC'字符串。

(2)在内存中创建了一个名为a的变量,并把它指向'ABC'。

也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据,例如下面的代码:

>>> a='ABC'
>>> b=a
>>> a='XYZ'
>>> print(b)

最后一行输出变量b的内容到底是'ABC'还是'XYZ'呢?如果从数学意义上理解,就会错误地得出b和a相同,应该是'XYZ'。实际上,b的值是'ABC'。我们一行一行执行代码,就可以看到到底发生了什么事。

执行a='ABC',解释器创建了字符串'ABC'和变量a,并把a指向'ABC',如图2-3所示。

图2-3 a指向'ABC'

执行b=a,解释器创建了变量b,并把b指向a指向的字符串'ABC',如图2-4所示。

图2-4 a、b指向'ABC'

执行a='XYZ',解释器创建了字符串'XYZ',并把a的指向改为'XYZ',但b没有更改,如图2-5所示。

图2-5 a指向'XYZ',b不变

最后输出变量b的结果自然是'ABC'了。

2.3.2 变量名称

程序常常选择有意义的名称作为变量名,以此标记变量的用途。

变量名是由数字或字符组成的任意长度的字符串,必须以字母开头。使用大写字母是合法的,但变量名建议使用小写字母开头。Python是区分大小写的。举个例子来说,Name和name是两个不同的变量名。交互模式中输入如下:

>>> name='study python is happy'
>>> Name='I aggree with you'
>>> print(name)
study python is happy
>>> print(Name)
I aggree with you

下划线“_”可以出现在变量名中,经常用于连接多个词组,如happy_study, do_it_with_ more_practice。交互模式输入如下:

>>> happy_study='stay hungry stay foolish'
>>> print(happy_study)
stay hungry stay foolish

如果给变量取非法的名称,解释器就会显示语法错误。请看下面的示例:

>>> 2wrongtest='just for test'
SyntaxError: invalid syntax

该示例提示语法错误,错误信息为无效的语法,原因为不是以字母开头的。

>>> xiaoming@me='surprised'
SyntaxError: can't assign to operator

该示例提示语法错误,错误信息为不能做指定操作,原因是包含一个非法字符@。

Python不允许使用关键字作为变量名,请看下面的例子:

>>> from='from'
SyntaxError: invalid syntax

from是Python的一个关键字,因此出现错误。

Python 3中共有33个关键字,都不能作为变量名来使用。 P5un2AKiYhGvGXuJKWO/yaXWu4C93LkvijJaQC0b5W9RkY/Gy19k55cVxWNEvw9Y

False     None      True    and      as     assert  break
class     continue  def     del     elif    else    except
finally   for       from    global  if      import   in
nonlocal  lambda    is      not     or      pass    raise
return    try        while  with     yield
点击中间区域
呼出菜单
上一章
目录
下一章
×