Python探索之旅 | 第一部分第四课:变量的奇幻世界

作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。
转载请注明出处。
原文:https://www.jianshu.com/p/d88e11bc7fec

《Python探索之旅》全系列

内容简介


  1. 前言
  2. 什么是变量及变量的作用
  3. Python 的数据类型
  4. 第一次使用函数
  5. 总结
  6. 第一部分第五课预告

1. 前言


在上一课 Python探索之旅 | 第一部分第三课:初识Python的解释器 中,尽管你可能没有注意到,但其实你已经输入了 Python 的第一条命令。

从现在开始,我们将逐渐深入学习 Python 的语法。这一课我们来学习一个重要的编程概念:变量

变量,在英语中是 variable,表示“变量,可变的,易变的”。

变量这个概念至关重要,一定要好好掌握。但我向你保证,这一课没有什么太复杂的内容,让我们开始愉快的学习之旅吧~

2. 什么是变量及变量的作用


变量是大多数(甚至是所有)编程语言中都有的概念之一。我们可以说,没有变量就不能编程,这并不夸张。就好像我们说“无胡歌不仙剑”一样:“无变量不编程”。

变量是什么?

变量简单来说就是你的程序中的数据,存储在计算机中的。变量是由字母、数字和其他符号组成的代码,你可以将其链接到程序中的数据,以便可以多次使用它并对其进行一些更有意思的操作。在程序中可以进行操作是很好的,但是如果不能将操作的结果存储在某个地方,那么很快就会显得有点无聊了。

我们可以将计算机的内存(memory)想像成一个有很多抽屉的大柜子。每个抽屉都可以包含数据,其中一些数据将是程序中的变量。

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第1张图片

变量是如何工作的


这非常简单。你可以想象你对 Python 说:“我希望在我命名的 age (表示“年龄”)变量中存储我的年龄,这样我就可以记住我的年龄(如果我的记忆力不是那么好的话),对这个变量加一(每当我过生日那天),并且在必要时显示这个变量的值。”

目前你可能还看不到存储程序中的数据的意义。但是,如果你什么也不存储,那你也几乎什么都做不了。

在 Python 中,要给变量赋值,是非常简单的,只需要这样写:

variable_name = value

variable_name 是变量名,name 表示“名字”。value 是变量的值,value 表示“值”。变量名和变量的值之间用 = 号连接。

变量必须遵守一些基本的语法规则:

  1. 变量名只能由英文字母(大写或小写字母)、数字和下划线符号(_)组成。例如 my_age_2

  2. 变量名不能以数字开头。因此,2_my_age 不是合法的变量名。

  3. Python 区分大小写,这意味着 AGEaGeage 是不同的变量。

除了以上必须遵守的命名规则外,每个程序员也有一些个人的命名习惯。我自己比较倾向于两种变量命令的习惯:

  • 第一种命名习惯:变量名都是由小写字母构成,并用下划线 _ 连接单词。例如,如果我需要创建一个储存自己年龄的变量,则会将其命名为 my_age。my 表示“我的”。

  • 第二种命名习惯:变量名中每个单词的第一个字母大写,但第一个单词的第一个字母小写,例如 myAge

你可以使用任何你喜欢的命名习惯,但是尽量在你的程序中保持一致的命名习惯,特别是当你参与大型项目时。

因此,如果我创建存储我的年龄的变量,可以用以下语法:

my_age = 32

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第2张图片

按下回车之后,Python 的解释器立即显示主提示符 >>>,没有任何消息。这意味着 Python 解释器正确理解了你的输入,并且没有发现任何错误。

上面的 my_age = 32 这一操作通常被称为“将值分配给变量”(或简称为“变量赋值”)。我们说,已经将 32 这个值分配给了变量 my_age

现在,你只需在 Python 解释器中输入该变量的名字,即可显示它的值:

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第3张图片

变量名,= 符号,和变量的值之间的空格数目是可选的。我这里用了一个空格,出于可读性考虑。

好的,一切看起来都那么美好,但是我们可以用此变量来做什么操作呢?

你可以对此变量进行很多操作,包括上一课我们所做的数学运算,只不过这一次你是用变量名来代替整数值了。你甚至可以将此变量进行计算后的值再赋值给此变量自身。

例如,让我们尝试将 my_age 这个变量的值加 2,再赋值给它自己:

my_age = my_age + 2

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第4张图片

现在,让我们尝试对 my_age 变量进行操作,并把操作后的值分配给另一个变量 my_age_x2

my_age_x2 = my_age * 2

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第5张图片

变量赋值的概念并不复杂,但却非常强大。与某些编程语言相比,在 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探索之旅 | 第一部分第四课:变量的奇幻世界_第6张图片

这是因为 Python 认为 I'm 中的单引号是字符串的结尾,就不知道拿后面的字符怎么办了。

为了克服这个问题,我们必须在字符串的中间对单引号进行特殊处理。因此,我们在字符串中包含的单引号之前插入反斜杠字符 \

string = 'I\'m Iron Man!'

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第7张图片

如果将双引号用作定界符,则必须转义双引号:

string = "\"A strong man will struggle with the storms of fate.\" (Thomas Addison)"

Python探索之旅 | 第一部分第四课:变量的奇幻世界

\(反斜杠)被称为“转义字符”,用于转义其他有用的符号。

例如,\n 是“换行符”,可以对字符串进行换行(例如,"I'm Oscar.\nWhat's your name?")。

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第8张图片

可以看到,Python 解释器显示了换行符,不过,是以 \n 原样输出的。在下面的内容中,我们将看到如何实际显示这些字符串,以及解释器为什么没有按我们所期望地显示它们。

要在字符串中写一个反斜杠本身,你必须先对其进行转义,写成 \\

使用三引号 """ 作为字符串的定界符,可以省去转义双引号和单引号的步骤。而且,你不需要用 \n 作为换行符,也可以编写多行。

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第9张图片

可以看到,>>> 提示符被 ... 提示符代替。这意味着 Python 解释器认为你尚未完成此命令的输入。直到新的 >>> 符号出现时,才宣告结束。换行符将在字符串中被自动替换为 \n

你可以使用三个单引号 ''' 来代替三个双引号 """。我个人不太使用 ''' 定界符,但是你得知道这种写法的存在,如果你以后在别人的 Python 代码中看到 ''',不必感到惊讶。

好的,我们已经完成了简单数据类型的介绍。

一点小技巧


在上一课中,我们学习了用于处理数字的“经典”运算符(+-*///%)。这些运算符不止能操作数字,我们之后也会看到它们还可以进行其他数据类型的操作。

在你以后的 Python 编程中,你经常会对变量进行“增加操作”。增加操作是指将变量的值加上一个数字。到目前为止,我们是用以下操作来将变量增加 1 的:

variable = variable + 1

这种语法很清晰直观,但是比较冗长。众所周知,程序员天生就是“懂得偷懒”的。因此,我们发明了更短的写法:

variable += 1

运算符 += 等效于将变量后面的值加到变量中。运算符 -=*=/=%=//= 的用法是一样的。你可以自行测试一下。

一些技巧


Python 提供了一种非常简单的方法来交换两个变量(交换它们的值)。在其他编程语言中,我们经常需要第三个变量的辅助,这第三个变量用于保存两个变量的值中的一个。但是,在 Python 中我们可以很简单地达到目的:

a = 7
b = 30
a,b = b,a

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第10张图片

如你所见,在执行第 3 行之后,变量 a 和 b 已经交换了它们的值。

我们还可以非常简单地将相同的值分配给多个变量:

x = y = 7

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第11张图片

而且,我们还可以将一行比较长的命令写在几行中,用 \(反斜杠)符号:

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第12张图片

如你所见,符号 \(反斜杠)向 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探索之旅 | 第一部分第四课:变量的奇幻世界_第13张图片

Python 会告诉你,变量 a 属于 int 类。关于 class(表示“类”)的概念,我们会在第三部分详细讲解。暂时我们只要知道 class(类)其实就代表了一种数据类型。

当然了,你也可以不借助变量来进行测试:

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第14张图片

str 是 string 的缩写。

print 函数


我们再来学习十分常用的函数:print 函数,这个函数可以显示变量的值。print 表示“打印”。

但是,我们之前在 Python 解释器中输入变量名,就可以显示变量的值了。为什么还需要 print 函数呢?

诚然,Python 解释器在交互模式下很好地显示了变量的值,是因为它会自动显示所有它可以显示的内容,以便跟随一个程序的所有步骤。但是,当你不使用解释器,仅在 Python 的代码中输入变量名,是无法为你输出变量的值的。此外,我们也注意到,解释器将字符串用定界符括起来并按原样显示转义字符(如 \n)。

print 函数专门用于显示,它的参数数量是可变的,也就是说,你可以要求它显示一个或多个变量。示例如下:

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第15张图片

第一次调用 print 函数是很容易理解的,就是显示变量 a 的值,为 7。

第二次调用 print 显示:

a = 10 and b = 5

这第二次调用可能会有点难以理解。实际上,我们将四个参数传递给 print 函数:两个字符串以及变量 ab

当 Python 解释此函数调用时,它将按照参数的顺序显示,并以空格分隔。

你可以用其他数据类型来测试 print 函数,例如带有换行符 \n 的字符串。

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第16张图片

可以看到,print 函数很好地解释了 \n 换行符,对字符串进行了换行输出。

Hello World 小示例

学习任何编程语言时,通常都会编写显示 Hello World! 的程序。

Hello World! 表示“你好,世界!”,是软件界的经典例程,因为这可以很快地展示一种编程语言的基本语法。

在某些语言中,尤其是编译语言(如 C语言,C++),可能需要好多行代码才能获得此结果。但是,正如我们看到的,在 Python 中,一行就足够了:

print("Hello World !")

Python探索之旅 | 第一部分第四课:变量的奇幻世界_第17张图片

Python 真是非常简洁。

5. 总结


  • 你可以用变量来存储程序中的数据。

  • 你可以对这些变量进行不同的操作:显示它们,使用它们进行计算,等等。

  • 要为变量赋值,我们使用这样的方式: variable_name = value

  • 有不同的变量类型,取决于你要储存的数据。int,float,str(字符串),等等。

  • 我们可以用 type 函数来获知数据类型。

  • 为了显示数据,例如变量的值,我们可以使用 print 函数。

6. 第一部分第五课预告


今天的课就到这里,一起加油吧!

下一课:[Python探索之旅 | 第一部分第五课:条件表达式]()


我是 谢恩铭,公众号「程序员联盟」(微信号:coderhub)运营者,慕课网精英讲师 Oscar 老师,终生学习者。
热爱生活,喜欢游泳,略懂烹饪。
人生格言:「向着标杆直跑」