ʕ • ᴥ • ʔ
づ♡ど
🎉 欢迎点赞支持🎉
个人主页:励志不掉头发的内向程序员;
专栏主页:python学习专栏;
文章目录
前言
变量是我们不管学习什么编程语言都没法绕开的话题,是我们学习路上的一块重要的基石,有助于我们理解以后的内容,我们一起来学习学习吧。
一、常量和表达式
我们可以把Python当作一个计算器来进行一些算术运算。
print(1 + 2 - 3)
print(1 + 2 * 3)
print(1 + 2 / 3)
我们点鼠标右键然后点击运行就可出现以下的信息。
注:
- print 是一个 Python 内置的 函数(会用即可,后面会讲)
- 可以使用+、-、*、/、()等运算符进行算术运算,先算乘除,后算加减,有括号先算括号。
- 运算符和数字之间,可以没有空格,也可以有多个空格,但是一般习惯上写一个空格(比较美观)。
在 print 中 1 + 2 - 3 这样的一个算式,在编程语言中称为表达式,算式的运算结果,称为表达式的返回值。
其中 1,2,3 这种称为字面值常量,+ - * / 这种称为运算符或者操作符。
我们第一串代码就是输出一个 1 + 2 - 3的表达式的返回值,所以是0。第二串同理,先乘除后加减,所以先2 * 3 后 6 + 1 所以返回值是7。最后一个同理,但是有人可能学了C语言或者Java会认为等于0。实际上Python会自动识别类型,所以不会有这种情况。而且编程中一般没有“四舍五入”这样的规则,所以最后是5而不是7,浮点数主要遵循IEEE754标准,在这套规则下,在内存中表示浮点数的时候,可能会存在细微的误差。
我们可以尝试用代码求 65.3,78.8,95.3,58.1 这四个分数的平均值。
print((65.3 + 78.8 + 95.3 + 58.1) / 4)
这里我们要先求加法再求除法所以就得用括号改变优先级。
代码美观这个问题,有人会觉得只要能运行正确不就行了,美观不美观有什么意义。但其实并非如此,我们的代码并不是只是单单给自己使用的,可能还得给别人去看去使用,如果你写的代码只有你和上帝才看的懂,过几天后只有上帝才看的懂的话,那很耽误事情。
二、变量类型
2.1、什么是变量
有的时候我们需要进行的计算可能更复杂一点,需要把一些计算的中间结果保存起来,这个时候就需要用到变量。
我们可以用代码来试着求 65.3,78.8,95.3,58.1 的方差。
因为我们方差要取每一项减去平均值,然后再计算平方,再求和后除以(项数-1)。如果我们还像上面那样求平均值就很麻烦,我们就可以用变量把它保存起来,以供后面反复使用。
avg = (65.3 + 78.8 + 95.3 + 58.1) / 4
total = (65.3 - avg) ** 2 + (78.8 - avg) ** 2 + (95.3 - avg) ** 2 + (58.1 - avg) ** 2
result = total / 3
print(result)
这里的avg、total、result均为变量,而这里的 ** 在 Python 中表示乘方运算 **2 即为求平方。
变量存在的意义就在于把我们中间结果保存起来。变量可以视为是一块能够容纳数据的空间,而这个空间往往对应到 “内存” 这个硬件设备上。
我们可以把内存就当成一个可以按照不同需求分配的宿舍楼,当我们数据或者变量去宿舍楼时就会按照它的高矮胖瘦分配不同大小的房间。
2.2、变量语法
(1)定义变量
创建变量的语句相当简单
a = 10
- a为变量名,创建很多变量时,就可以用这些名字来区分。
- = 为赋值运算符,表示把 = 右侧的数据复制一份放到 = 左侧的空间中。
这样就可以定义一个变量了,它的含义就相当于把 10 这个数据放到我们创建出来的变量 a 的空间中。当然我的定义时 = 右侧不是一定得是字面值常量,也可以是别的变量。
a = 10
b = a
变量的名字不是随便乱取的,它有一定的规则,在这些规则中包含了一定得遵守的硬规则和建议遵守的软规则。
硬规则:
- 变量名必须由数字、字面、下划线构成,不能包含特殊符号(如a*a,a@a等都是非法的)。
- 数字不能开头。
- 变量名不能和 Python 的“关键字”重复(及if、else等在语法中有特殊含义的单词)。
- Python 中的变量名是大小写敏感的,区分大小写(num和Num是两个不同的变量)。
若不遵守以上的规则,我们程序就会报错,像下面的红色波浪号就是有问题,把光标放到上面就能显示错误的原因。有错误程序肯定是运行不了的。
除了必须要遵守的硬规则,还有各种程序猿在不断探索和尝试所提出的一些可以提升代码的美观度、可读性、方便性的一些软规则。
软规则:
- 给变量命名时,尽量使用描述性的单词来表示(尽量通过名字来表现出变量的作用,如count表示计数、personInfo表示人的信息)。
- 当我们使用一个单词描述不清楚时,可以使用多个单词来命名(不怕名字长,而怕含义表达不清)。
包含多个单词时,命名有多种规范
驼峰命名:除了第一个单词的首字母之外,后续每个单词的首字母都大写。
如:personInfo、totalCount
蛇形命名:单词之间使用下划线 _ 来进行分割。
如:person_info、total_count
具体使用哪种程序,我们任选即可。以后到公司中,一般都会有明确的编程规范,我们听从即可。
(2)使用变量
当我们明白如何创建变量时,我们就可以去使用变量了。
我们一般使用变量就2件事情:
读取变量的值:
a = 10
print(a)
修改变量的值:
a = 10
a = 20
在Python中,修改变量也是使用 = 运算,看起来和定义变量没有任何区别。
当然也可以用一个变量去修改另一个变量。
a = 10
b = a
print(b)
a = 20
print(a)
print(b)
我们首先对 a 使用 = 的过程是创建变量(初始化),后续再对 a 使用 = 的过程是修改 a 的内容(赋值)。
2.3、变量类型
变量中存储的不仅仅是数字,还可以存储其他种类的数据,为了区分不同种类的数据,我们便引入了 “类型” 这样的概念。
要想去查看一个变量的类型,我们可以使用
type(变量名);
和print类似,也是Python 的内置函数,作用就是查看一个变量的类型。
(1)整数
a = 10
print(type(a))
在 Python 中的变量类型,不需要在定义变量的时候显示声明,而只是依靠初始化语句,根据初始化的值的类型来进行确定。
我们可以看到,表示一个整数的变量是 int ,我们管 int 叫做整型。在 Python 中,int 能够表示的数据范围是 “无穷” 的,没有上限和下限。所以学过其他编程语言的同学,在 Python中就不存在 long 这样的类型了,像 byte,short 这些类型也不存在。
(2)浮点数
a = 1.1
print(type(a))
浮点数,就是我们所谓的小数,它的类型是float,我们管它叫做浮点型。
在我们 C++/Java 中,float 是四个字节的,也叫做 “单精度浮点数”。而还有一个类型是 double 是八个字节的,也叫做 “双精度浮点数”。
而我们 Python 中的 float 就是双精度浮点数了,等同于 C++/Java 中的 double。
我们把一个二进制位称为一比特(bit),而8个 bit 放在一起,就称为一字节,是计算机常用单位。
我们在这里就可以隐约看出 Python 的设计哲学:解决一个问题,只提供一种方案。所以它就没有给我们提供繁多的类型,像 C++ 我们还得思考用整型时是用 int 还是 long,麻烦不说还容易错。
(3)字符串
字符串就和羊肉串一样,就是把一个个字符放(串)在一起。那什么又是字符呢?
像我们英文字母、阿拉伯数字、标点符号等,甚至汉字符号,都可以认为是 “字符”;
如:a、8、+ 等都是我们的字符。
而把这些字符放到一起,那便是字符串了。我们 Python 规定使用引号把一系列字符引起来就构成了字符串,单双引号都是可以的(所有的标点符号都得是英文的,不能是中文的)。
a = 'hello'
print(type(a))
这就是字符串类型了,字符串这个单词的全拼是 string,它的缩写就是 str 了。当然双引号也是可以的。
a = "hello"
print(type(a))
为什么要支持两种引号呢,废掉一种行不行?其实这两种引号的结合还是有妙用的。比如我们想打印这样一句话:
My name is "ChengXvYuan"
我们输入的时候就会出问题。
这是因为我们对名字的双引号给Python的编译器解释为前面一个字符串 + ChengXvYuan + 后面一个字符串,而中间的 ChengXvYuan 编译器不认识,所以就会出问题。
而解决办法也很简单,我们不是有两种引号可以使用吗,我们可以把外面的双引号变成单引号即可。
a = 'My name is "ChengXvYuan"'
print(a)
因此,如果我们字符串中包含了双引号,表示字符串就可以用单引号引起来,反之亦然。当然如果里面有单引号也有双引号,表示字符串就可以用三引号(三个单引号)引起来。
a = '''My 'name' is "ChengXvYuan"'''
print(a)
这些引号都是等价的关系,你觉得哪个方便,哪个好用都可以。没有实际的影响。
我们字符串还有一些别的操作,就比如用 len 函数来查看字符串的长度,这也是 Python 的一个内置函数,是而字符串长度就是字符的个数。
a = '''My 'name' is "ChengXvYuan"'''
print(a)
print(len(a))
大家要注意我们的标点符号和空格也是字符哦。
我们字符串还支持拼接,就是把两个字符串拼在一起。
a1 = 'hello'
a2 = 'world'
print(a1 + a2)
我们字符串相加就相当于拼接。此处就相当于把 a2 字符串拼接到 a1 末尾形成一个新的字符串。
拼接后对我们 a1 和 a2 是没有影响的。
当然我们字符串和数字是不同类型的,我们不能够将字符串和它们相加,不然运行时会出错。
a = 'hello'
b = 10
print(a + b)
注在 Python 中,报错有两种情况:
- 语法错误:在程序运行前,Python 解释器就能把错误识别出来。
- 运行错误:在程序运行之前识别不了,必须执行到对应行代码才能发现问题。
(4)布尔
布尔类型是一种特殊的类型,取值只有两种,True(真)和 False(假)。它的主要用于逻辑判断。在Python中真就是 True;假为 False,首字母得大写。
a = True
b = False
print(type(a))
print(type(b))
这就是布尔类型了。布尔类型在我们后续进行逻辑判断时是非常有用的。
(5)其他
除了上述类型之外,Python 中还有 list、tuple、dict、自定义类型 等,我们后续再介绍。
2.4、为什么有这么多类型
(1)类型决定了数据在内存中占用多大空间
例如 float 类型在内存空间中占8个字节;而 int 默认占4个字节,超了就动态扩容;bool类型一个字节就足以。
(2)类型其实约定了能对这个变量做什么样的操作
例如 int/float 类型的变量可以进行 +、-、*、/等操作。
而 str 类型的变量,只能进行 +(并且行为和 int 还不同,是字符串拼接),不能进行 -、*、/,但是却能使用 len 等其他操作。
总的来说,类型系统其实是在对变量进行 “归类”,相同类型的变量(数据)往往具有类似的特性和使用规则。
2.5、动态类型特性
在 Python 中,一个变量是什么类型,是可以在 “程序运行” 过程中发生变化的,这个特性称为 “动态类型”。
a = 10
print(type(a))
a = 'hello'
print(type(a))
在程序执行过程中,a 的类型刚开始是 int,后面就变化为 str 了。
在 C++/Java 中就不支持这样做,一旦我们的变量创建成功就不能够更改类型了,称之为静态类型。
当然,一个编程语言是否是动态类型,只取决于在运行时类型是否改变,不取决于变量定义的时候是否声明类型。
动态类型写法是比较灵活的,它提高了语言的表达能力。但是在编程中,“灵活” 这个词往往是 “贬义” 的,因为往往更容易出错。相比之下,静态类型往往还是更好一点的,尤其是在大型程序中,多人协作开发时更能体现。
总结
以上便是 Python 中常见的变量类型,我们应该仔细学习,只有基础巩固了才能在后期发挥更多的可能,大家加油。
🎇坚持到这里已经很厉害啦,辛苦啦🎇
ʕ • ᴥ • ʔ
づ♡ど