Python探索之旅 | 第一部分第四课:变量的奇幻世界
作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。
转载请注明出处。
原文:https://www.jianshu.com/p/d88e11bc7fec
《Python探索之旅》全系列
内容简介
- 前言
- 什么是变量及变量的作用
- Python 的数据类型
- 第一次使用函数
- 总结
- 第一部分第五课预告
1. 前言
在上一课 Python探索之旅 | 第一部分第三课:初识Python的解释器 中,尽管你可能没有注意到,但其实你已经输入了 Python 的第一条命令。
从现在开始,我们将逐渐深入学习 Python 的语法。这一课我们来学习一个重要的编程概念:变量。
变量,在英语中是 variable,表示“变量,可变的,易变的”。
变量这个概念至关重要,一定要好好掌握。但我向你保证,这一课没有什么太复杂的内容,让我们开始愉快的学习之旅吧~
2. 什么是变量及变量的作用
变量是大多数(甚至是所有)编程语言中都有的概念之一。我们可以说,没有变量就不能编程,这并不夸张。就好像我们说“无胡歌不仙剑”一样:“无变量不编程”。
变量是什么?
变量简单来说就是你的程序中的数据,存储在计算机中的。变量是由字母、数字和其他符号组成的代码,你可以将其链接到程序中的数据,以便可以多次使用它并对其进行一些更有意思的操作。在程序中可以进行操作是很好的,但是如果不能将操作的结果存储在某个地方,那么很快就会显得有点无聊了。
我们可以将计算机的内存(memory)想像成一个有很多抽屉的大柜子。每个抽屉都可以包含数据,其中一些数据将是程序中的变量。
变量是如何工作的
这非常简单。你可以想象你对 Python 说:“我希望在我命名的 age
(表示“年龄”)变量中存储我的年龄,这样我就可以记住我的年龄(如果我的记忆力不是那么好的话),对这个变量加一(每当我过生日那天),并且在必要时显示这个变量的值。”
目前你可能还看不到存储程序中的数据的意义。但是,如果你什么也不存储,那你也几乎什么都做不了。
在 Python 中,要给变量赋值,是非常简单的,只需要这样写:
variable_name = value
variable_name
是变量名,name 表示“名字”。value
是变量的值,value 表示“值”。变量名和变量的值之间用 =
号连接。
变量必须遵守一些基本的语法规则:
-
变量名只能由英文字母(大写或小写字母)、数字和下划线符号(
_
)组成。例如my_age_2
。 -
变量名不能以数字开头。因此,
2_my_age
不是合法的变量名。 -
Python 区分大小写,这意味着
AGE
,aGe
和age
是不同的变量。
除了以上必须遵守的命名规则外,每个程序员也有一些个人的命名习惯。我自己比较倾向于两种变量命令的习惯:
-
第一种命名习惯:变量名都是由小写字母构成,并用下划线
_
连接单词。例如,如果我需要创建一个储存自己年龄的变量,则会将其命名为my_age
。my 表示“我的”。 -
第二种命名习惯:变量名中每个单词的第一个字母大写,但第一个单词的第一个字母小写,例如
myAge
。
你可以使用任何你喜欢的命名习惯,但是尽量在你的程序中保持一致的命名习惯,特别是当你参与大型项目时。
因此,如果我创建存储我的年龄的变量,可以用以下语法:
my_age = 32
按下回车之后,Python 的解释器立即显示主提示符 >>>
,没有任何消息。这意味着 Python 解释器正确理解了你的输入,并且没有发现任何错误。
上面的 my_age = 32
这一操作通常被称为“将值分配给变量”(或简称为“变量赋值”)。我们说,已经将 32 这个值分配给了变量 my_age
。
现在,你只需在 Python 解释器中输入该变量的名字,即可显示它的值:
变量名,
=
符号,和变量的值之间的空格数目是可选的。我这里用了一个空格,出于可读性考虑。
好的,一切看起来都那么美好,但是我们可以用此变量来做什么操作呢?
你可以对此变量进行很多操作,包括上一课我们所做的数学运算,只不过这一次你是用变量名来代替整数值了。你甚至可以将此变量进行计算后的值再赋值给此变量自身。
例如,让我们尝试将 my_age
这个变量的值加 2,再赋值给它自己:
my_age = my_age + 2
现在,让我们尝试对 my_age
变量进行操作,并把操作后的值分配给另一个变量 my_age_x2
。
my_age_x2 = my_age * 2
变量赋值的概念并不复杂,但却非常强大。与某些编程语言相比,在 Python 中为变量赋值是非常简单的。如果你事先没有创建变量,Python 会自动为你打理一切。如果该变量已经存在,则将旧值删除并替换为新值。还有什么比这更简单的呢?
此外,有一些关键字(keyword)是 Python 预留的,也就是说,你不能使用这些关键字来命名变量。
以下是 Python 3 的关键字列表(一共有 33 个关键字,除前三个关键字,其余按英语字母表顺序排序):
False | True | None | |||
---|---|---|---|---|---|
and | as | assert | break | class | continue |
def | del | elif | else | except | finally |
for | from | global | if | import | in |
is | lambda | nonlocal | not | or | pass |
raise | return | try | while | with | yield |
这些关键字是被 Python 所保留的,因此你不能使用这些名称来为变量命名。
上表中,前三个关键字(False,True,None)的首字母是大写的,其余的关键字首字母都是小写。
请不要去死记硬背这些关键字,随着你用 Python 编程的深入,你自然而然会记住它们的。我们的课程也会用到这些关键字中的大部分。
3. Python 的数据类型
接下来,我们要学习在许多编程语言中都有的一个非常重要的概念。请认真对待,因为你必须熟悉这个概念,才能继续本课程的学习。放心,只要你专心,就不会有什么太复杂的概念。
什么是数据类型?
数据类型,在英语中是 data type。data 表示“数据”,type 表示“类型”。
到目前为止,我们在程序中只使用过数字。虽然我们很少会编写没有任何数字的程序,但是数字绝对不是我们可以在 Python 中使用的唯一数据。之后的课程中,我们甚至还会学习如何创建你自己的数据类型。
Python 需要知道使用的数据是什么类型的,以便知道对此数据可以执行哪些操作。
在本课中,你将学习如何使用字符串。对字符串做“乘法”,和对数字做乘法,是不一样的。对于某些类型的数据,乘法更是没有意义的。因此,Python 将每个数据与一个类型相关联,类型决定了对此数据可以进行哪些操作。
不同的数据类型
暂时,我们只会学习最常用和最容易处理的数据类型。以后会有专门的章节,用于讲解更复杂的数据类型。
整数
是的,Python 将整数与浮点数区分开。
为什么要区分开呢?
最初,主要是为了解决内存空间的问题。但对于计算机而言,对浮点数执行的操作与对整数执行的操作并不相同,因此这种区分仍然有意义。
整数类型在 Python 中是 int
(int 是 integer 的缩写,表示“整数”)。整数,简单来说是没有小数点的数字。例如:
7
在上一课中,我们已经学习过对整数类型的数据可以执行哪些操作。因此,我们不再赘述。
浮点数
浮点数,简单来说是带小数点的数,例如 3.14
。浮点数在 Python 中是 float
(float 表示“浮动”)。如果一个数字没有浮点部分(小数点后面的部分),但是你希望 Python 将其视为浮点数,则可以向其添加浮点部分 0,例如 52.0
。
小数点后的数字位数不是无限的,因为在计算机科学中没有什么是无限的。但是精确度对于处理高精度的数据是非常重要的。
字符串
幸好,Python 中可用的数据类型不仅限于数字。我们在本课中学习的最后一个常用的“简单”类型是字符串。这种类型的数据可以存储一连串字符(character)。
字符串,在英语中是 string。string 的原意是“一串,一行,弦,线”。
在 Python 中,你可以使用不同的方式来书写字符串:
- 用双引号作为定界符,例如
"this is a string"
。 - 用单引号作为定界符,例如
'this is a string'
。 - 用三个双引号作为定界符,例如
"""this is a string"""
。 - 用三个单引号作为定界符,例如
'''this is a string'''
。
我们可以像对待数字(和所有数据类型)一样,将字符串存储在变量中,例如 my_string = "Hello, everybody!"
。
如果使用简单的定界符(双引号或单引号)将字符串括起来,此字符串中又有双引号或单引号,则会出现问题。
例如,如果输入 string = 'I'm Iron Man!'
,则会收到错误信息:
这是因为 Python 认为 I'm
中的单引号是字符串的结尾,就不知道拿后面的字符怎么办了。
为了克服这个问题,我们必须在字符串的中间对单引号进行特殊处理。因此,我们在字符串中包含的单引号之前插入反斜杠字符 \
。
string = 'I\'m Iron Man!'
如果将双引号用作定界符,则必须转义双引号:
string = "\"A strong man will struggle with the storms of fate.\" (Thomas Addison)"
\
(反斜杠)被称为“转义字符”,用于转义其他有用的符号。
例如,\n
是“换行符”,可以对字符串进行换行(例如,"I'm Oscar.\nWhat's your name?"
)。
可以看到,Python 解释器显示了换行符,不过,是以 \n
原样输出的。在下面的内容中,我们将看到如何实际显示这些字符串,以及解释器为什么没有按我们所期望地显示它们。
要在字符串中写一个反斜杠本身,你必须先对其进行转义,写成 \\
。
使用三引号 """
作为字符串的定界符,可以省去转义双引号和单引号的步骤。而且,你不需要用 \n
作为换行符,也可以编写多行。
可以看到,>>>
提示符被 ...
提示符代替。这意味着 Python 解释器认为你尚未完成此命令的输入。直到新的 >>>
符号出现时,才宣告结束。换行符将在字符串中被自动替换为 \n
。
你可以使用三个单引号 '''
来代替三个双引号 """
。我个人不太使用 '''
定界符,但是你得知道这种写法的存在,如果你以后在别人的 Python 代码中看到 '''
,不必感到惊讶。
好的,我们已经完成了简单数据类型的介绍。
一点小技巧
在上一课中,我们学习了用于处理数字的“经典”运算符(+
,-
,*
,/
,//
,%
)。这些运算符不止能操作数字,我们之后也会看到它们还可以进行其他数据类型的操作。
在你以后的 Python 编程中,你经常会对变量进行“增加操作”。增加操作是指将变量的值加上一个数字。到目前为止,我们是用以下操作来将变量增加 1 的:
variable = variable + 1
这种语法很清晰直观,但是比较冗长。众所周知,程序员天生就是“懂得偷懒”的。因此,我们发明了更短的写法:
variable += 1
运算符 +=
等效于将变量后面的值加到变量中。运算符 -=
,*=
, /=
,%=
,//=
的用法是一样的。你可以自行测试一下。
一些技巧
Python 提供了一种非常简单的方法来交换两个变量(交换它们的值)。在其他编程语言中,我们经常需要第三个变量的辅助,这第三个变量用于保存两个变量的值中的一个。但是,在 Python 中我们可以很简单地达到目的:
a = 7
b = 30
a,b = b,a
如你所见,在执行第 3 行之后,变量 a 和 b 已经交换了它们的值。
我们还可以非常简单地将相同的值分配给多个变量:
x = y = 7
而且,我们还可以将一行比较长的命令写在几行中,用 \
(反斜杠)符号:
如你所见,符号 \
(反斜杠)向 Python 表示“此命令在下一行继续”。这样,你就可以将命令分成几行。命令分几行写的时候,可以看到 >>>
这个主提示符就变为 ...
这个副提示符了。
4. 第一次使用函数
好的,一切进展顺利~
不过,我想在这有关变量的一课的最后,介绍一下函数的使用。虽然之后我们会有专门的一课来讲解函数,但是我接下来要向你展示的知识点,还是很有用的,也可以作为函数的入门。
使用函数
函数是什么?
函数,在英语中是 function,表示“函数,功能,运作”。
顾名思义,函数是有一定功能的,是会执行一些操作(运作)的。
函数执行一定数量的预先存储的命令。简单来说,函数就像存储了多个命令(例如,“起床,穿衣服,洗漱,吃早饭,上班”)以执行特定操作,并给它起个名字(例如,“早上做的事”)。然后,你就可以根据需要,多次调用此函数的名称即可(这避免了多次重复书写这些命令)。我们在函数那一课会更详细地介绍相关知识点。
大多数函数都需要至少一个参数(parameter)来处理数据。这些参数是你传递给函数的信息,以便函数可以处理这些信息。我要向你展示的函数也不例外。目前,这些知识点似乎有些难懂,但是请放心,我们会用示例来帮助理解。
函数的使用要遵循以下的语法:
fonction_name(parameter_1, parameter_2, …, parameter_n)
-
首先,编写函数的名称(
fonction_name
)。 -
然后,你可以将函数的参数放在括号
()
中,用逗号,
隔开。如果函数不带任何参数,括号也是不可少的,只是括号之间不包含任何内容。
type 函数
在上一节中,我们学习了简单的数据类型(至少其中一些)。
Python 的强大功能之一是可以自动获知变量的(数据)类型,在变量被赋值时。
其他一些编程语言,例如 C语言,C++,Java,变量是需要预先声明类型的。例如在 C语言中,创建一个 int 型变量并赋值是像这样的:int a = 10;
。但是 Python 却不需要你声明变量 a
是 int 类型,它可以自己根据赋值的数据来推断。
因此,我们说 Python 是动态类型的语言,而 C语言、Java、C++ 是静态类型的语言。
我们可以用 type
函数来输出变量的类型。type 表示“类型”。
type
函数的语法很简单:
type(variable_name)
type
函数返回作为参数传递的变量的类型。例如:
a = 10
type(a)
Python 会告诉你,变量 a 属于 int 类。关于 class(表示“类”)的概念,我们会在第三部分详细讲解。暂时我们只要知道 class(类)其实就代表了一种数据类型。
当然了,你也可以不借助变量来进行测试:
str 是 string 的缩写。
print 函数
我们再来学习十分常用的函数:print
函数,这个函数可以显示变量的值。print 表示“打印”。
但是,我们之前在 Python 解释器中输入变量名,就可以显示变量的值了。为什么还需要 print
函数呢?
诚然,Python 解释器在交互模式下很好地显示了变量的值,是因为它会自动显示所有它可以显示的内容,以便跟随一个程序的所有步骤。但是,当你不使用解释器,仅在 Python 的代码中输入变量名,是无法为你输出变量的值的。此外,我们也注意到,解释器将字符串用定界符括起来并按原样显示转义字符(如 \n
)。
print
函数专门用于显示,它的参数数量是可变的,也就是说,你可以要求它显示一个或多个变量。示例如下:
第一次调用 print
函数是很容易理解的,就是显示变量 a
的值,为 7。
第二次调用 print 显示:
a = 10 and b = 5
这第二次调用可能会有点难以理解。实际上,我们将四个参数传递给 print
函数:两个字符串以及变量 a
和 b
。
当 Python 解释此函数调用时,它将按照参数的顺序显示,并以空格分隔。
你可以用其他数据类型来测试 print
函数,例如带有换行符 \n
的字符串。
可以看到,print
函数很好地解释了 \n
换行符,对字符串进行了换行输出。
Hello World 小示例
学习任何编程语言时,通常都会编写显示 Hello World!
的程序。
Hello World!
表示“你好,世界!”,是软件界的经典例程,因为这可以很快地展示一种编程语言的基本语法。
在某些语言中,尤其是编译语言(如 C语言,C++),可能需要好多行代码才能获得此结果。但是,正如我们看到的,在 Python 中,一行就足够了:
print("Hello World !")
Python 真是非常简洁。
5. 总结
-
你可以用变量来存储程序中的数据。
-
你可以对这些变量进行不同的操作:显示它们,使用它们进行计算,等等。
-
要为变量赋值,我们使用这样的方式:
variable_name = value
。 -
有不同的变量类型,取决于你要储存的数据。int,float,str(字符串),等等。
-
我们可以用
type
函数来获知数据类型。 -
为了显示数据,例如变量的值,我们可以使用
print
函数。
6. 第一部分第五课预告
今天的课就到这里,一起加油吧!
下一课:Python探索之旅 | 第一部分第五课:条件表达式
我是 谢恩铭,公众号「程序员联盟」(微信号:coderhub)运营者,慕课网精英讲师 Oscar 老师,终生学习者。
热爱生活,喜欢游泳,略懂烹饪。
人生格言:「向着标杆直跑」