Python语言中的变量
对于刚接触编程的新手来说,心里大概率藏着两个疑问:一是“计算机程序到底是什么?”,二是“学会写程序能用来做什么?”。在正式开启Python学习之旅前,先用通俗的话把这两个问题讲明白,帮你建立对编程的基本认知:所谓程序,本质就是“数据”和“指令”按一定逻辑排列组合而成的集合;而写程序,就是通过设计合理的数据和清晰的指令,让计算机乖乖完成我们想做的事——小到自动整理表格,大到开发手机APP,核心逻辑都是如此。
如今Python能成为最热门的编程语言之一,吸引无数新手和行业大佬青睐,核心原因就两点:简单、强大。和C、C++、Java这些编程语言比起来,Python对新手和非专业人士格外友好——不用死记硬背复杂的语法规则,哪怕是零基础,花几天时间也能写出能跑的代码。更关键的是,不管是日常办公、数据分析,还是人工智能、Web开发,Python都能给出简单优雅的解决方案。接下来,我们就从Python最基础的“语言积木”开始.
计算机小常识
在系统学Python编程前,先补几个计算机基础小知识。这些知识看似和写代码没关系,但能帮你理解“程序为什么能跑起来”,后续学变量、数据类型时会更轻松。从硬件角度看,计算机的核心硬件主要由五部分组成:运算器、控制器、存储器、输入设备和输出设备。
这五部分里,运算器和控制器是核心中的核心,它们合在一起就是我们常说的CPU(中央处理器)——相当于计算机的“大脑”,专门负责执行加减乘除这类算术运算,以及控制程序的执行顺序。之前我们说过“程序是指令的集合”,写程序的本质,就是把完成任务的一系列指令按逻辑排好,再交给CPU执行,最终让计算机实现我们想要的功能。
存储器就是计算机的“记忆仓库”,用来存程序和数据,它又分两种:一种是内部存储器,也就是我们常说的内存;另一种是外部存储器,比如硬盘、U盘、固态硬盘。内存的特点是读写速度极快,但断电后数据会丢失,所以程序运行时,它的指令和数据必须先加载到内存里,CPU才能直接读取;外部存储器则相反,读写速度慢一点,但断电后数据不会丢,适合长期存放我们下载的软件、文档等。
输入设备和输出设备是我们和计算机“沟通”的桥梁,合称I/O设备。像键盘、鼠标、麦克风、摄像头都属于输入设备——负责把我们的操作(比如敲键盘、点鼠标)或现实中的信息(比如声音、画面)转换成计算机能懂的信号;而显示器、打印机、扬声器就是输出设备——把计算机处理后的结果(比如文字、图片、声音)转换成我们能理解的形式。
这里要重点提一下:我们现在用的电脑、笔记本、服务器,基本都遵循“冯·诺依曼体系结构”。这个结构有两个关键特点:一是把存储器和CPU分开设计,让指令和数据能独立存储、处理;二是规定计算机内部所有数据都用二进制编码——这一点对理解后续的变量至关重要,一定要记牢。
说到二进制,新手可能会疑惑:“为什么计算机不用我们熟悉的十进制,非要用二进制?” 答案很简单:二进制在物理层面最容易实现。二进制只有0和1两个符号,我们可以用高电压表示1,低电压表示0,通过简单的电路就能完成数据存储和运算。而十进制有0-9十个符号,需要十种不同的物理状态来表示,实现难度远超二进制。
其实二进制和十进制的本质是一样的,都是计数规则——十进制是“逢十进一”,二进制是“逢二进一”。人类习惯用十进制,大概率是因为我们有十根手指,计数时“用完十根手指就进位”很自然。当然也有例外,比如古代玛雅人,他们不仅用手指,还会用脚趾计数,所以用的是“逢二十进一”的二十进制。也正因为计数法不同,玛雅人的历法和我们常用的公历不一样:按玛雅历法,2012年是上一个“太阳纪”的最后一年,2013年是新“太阳纪”的开始。后来这件事被传成了“2012世界末日”,纯属以讹传讹。现在有研究者猜测,玛雅文明发展缓慢,可能和二十进制的复杂性有关——毕竟二十进制的运算和表示,比十进制、二进制都麻烦。
给新手一个定心丸:不是所有程序员都要精通二进制,也不用背熟十进制和二进制、八进制、十六进制的转换公式。大多数日常开发场景里,哪怕不懂这些底层知识,也能写出好用的代码。但有一个核心事实必须知道:不管是文本、图片、音频还是视频,只要进入计算机内存,最终都会变成二进制形式存储和处理——这是理解“变量”本质的关键前提。
变量和类型
我们已经知道数据会以二进制形式存在内存里,那问题来了:我们怎么在程序里找到这些数据,还能修改它们呢?答案就是“变量”。在编程语言里,变量就是数据的“载体”,简单说就是一块被我们起了名字的内存空间,专门用来存数据。和普通的内存空间比,变量最大的特点是“可读写、可修改”——我们能随时查看变量里存的数据,也能把新数据存进去覆盖旧数据,这种特性是程序实现运算和逻辑控制的基础。
计算机能处理的数据类型很多,除了我们熟悉的数字(比如年龄、工资、成绩),还有文本(比如姓名、文章)、图片、音频、视频等。虽然这些数据在内存里都是二进制,但它们的存储规则、运算方式完全不同——比如数字能做加减乘除,文本却不能。所以编程语言会用“数据类型”来区分这些数据。Python自带了多种常用数据类型,也允许我们自己定义新类型(自定义类型后续会讲),先重点掌握四种最基础、最常用的类型。
- 1. 整型(
int):Python 中可以处理任意大小的整数,而且支持二进制(如0b100,换算成十进制是4)、八进制(如0o100,换算成十进制是64)、十进制(100)和十六进制(0x100,换算成十进制是256)的表示法。运行下面的代码,看看会输出什么。print(0b100) # 二进制整数print(0o100) # 八进制整数print(100) # 十进制整数print(0x100) # 十六进制整数
- 2. 浮点型(
float):浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,浮点数除了数学写法(如123.456)之外还支持科学计数法(如1.23456e2,表示)。运行下面的代码,看看会输出什么。print(123.456) # 数学写法print(1.23456e2) # 科学计数法
- 3. 字符串型(
str):字符串是以单引号或双引号包裹起来的任意文本,比如'hello'和"hello"。 - 4. 布尔型(
bool):布尔型只有True、False两种值,要么是True,要么是False,可以用来表示现实世界中的“是”和“否”,命题的“真”和“假”,状况的“好”与“坏”,水平的“高”与“低”等等。如果一个变量的值只有两种状态,我们就可以使用布尔型。
变量命名
对于每个变量,我们都需要给它取一个名字,就如同我们每个人都有自己的名字一样。在 Python 中,变量命名需要遵循以下的规则和惯例。
- • 规则1:变量名由字母、数字和下划线构成,数字不能开头。需要说明的是,这里说的字母指的是 Unicode 字符,Unicode 称为万国码,囊括了世界上大部分的文字系统,这也就意味着中文、日文、希腊字母等都可以作为变量名中的字符,但是一些特殊字符(如:
!、@、#等)是不能出现在变量名中的。我们强烈建议大家把这里说的字母理解为尽可能只使用英文字母。 - • 规则2:Python 是大小写敏感的编程语言,简单的说就是大写的
A和小写的a是两个不同的变量,这一条其实并不算规则,而是需要大家注意的地方。 - • 规则3:变量名不要跟 Python 的关键字重名,尽可能避开 Python 的保留字。这里的关键字是指在 Python 程序中有特殊含义的单词(如:
is、if、else、for、while、True、False等),保留字主要指 Python 语言内置函数、内置模块等的名字(如:int、print、input、str、math、os等)。
- • 惯例1:变量名通常使用小写英文字母,多个单词用下划线进行连接。
惯例2和惯例3大家暂时不用管,讲到后面自然会明白的。当然,作为一个专业的程序员,给变量命名时做到见名知意也是非常重要,这彰显了一个程序员的专业气质,很多开发岗位的面试也非常看重这一点。
变量的使用
下面通过例子来说明变量的类型和变量的使用。
"""使用变量保存数据并进行加减乘除运算Version: 1.0Author: 南阳"""a = 45# 定义变量a,赋值45b = 12# 定义变量b,赋值12print(a, b) # 45 12print(a + b) # 57print(a - b) # 33print(a * b) # 540print(a / b) # 3.75
在 Python 中可以使用type函数对变量的类型进行检查。程序设计中函数的概念跟数学上函数的概念非常类似,数学上的函数相信大家并不陌生,它包括了函数名、自变量和因变量。如果暂时不理解函数这个概念也不要紧,我们会在后续的内容中专门讲解函数的定义和使用。
"""使用type函数检查变量的类型Version: 1.0Author: 南阳"""a = 100b = 123.45c = 'hello, world'd = Trueprint(type(a)) # <class 'int'>print(type(b)) # <class 'float'>print(type(c)) # <class 'str'>print(type(d)) # <class 'bool'>
可以通过 Python 内置的函数来改变变量的类型,下面是一些常用的和变量类型相关的函数。
- •
int():将一个数值或字符串转换成整数,可以指定进制。 - •
float():将一个字符串(在可能的情况下)转换成浮点数。 - •
str():将指定的对象转换成字符串形式,可以指定编码方式。 - •
chr():将整数(字符编码)转换成对应的(一个字符的)字符串。 - •
ord():将(一个字符的)字符串转换成对应的整数(字符编码)。
下面的例子为大家演示了 Python 中类型转换的操作。
"""变量的类型转换操作Version: 1.0Author: 南阳"""a = 100b = 123.45c = '123'd = '100'e = '123.45'f = 'hello, world'g = Trueprint(float(a)) # int类型的100转成float,输出100.0print(int(b)) # float类型的123.45转成int,输出123print(int(c)) # str类型的'123'转成int,输出123print(int(c, base=16)) # str类型的'123'按十六进制转成int,输出291print(int(d, base=2)) # str类型的'100'按二进制转成int,输出4print(float(e)) # str类型的'123.45'转成float,输出123.45print(bool(f)) # str类型的'hello, world'转成bool,输出Trueprint(int(g)) # bool类型的True转成int,输出1print(chr(a)) # int类型的100转成str,输出'd'print(ord('d')) # str类型的'd'转成int,输出100
说明:str类型转int类型时可以通过base参数来指定进制,可以将字符串视为对应进制的整数进行转换。str类型转成bool类型时,只要字符串有内容,不是''或"",对应的布尔值都是True。bool类型转int类型时,True会变成1,False会变成0。在 ASCII 字符集和 Unicode 字符集中, 字符'd'对应的编码都是100。
核心知识点总结
在 Python 程序中,我们可以使用变量来保存数据,变量有不同的类型,常用的类型有int、float、str和bool。在有需要的情况下,可以通过 Python 内置的函数对变量进行类型转换。变量是可以做运算的,这是解决很多问题的先决条件,我们会在下一课中为大家详细介绍变量的运算。