数据类型和变量

数据类型

  在 Python 中,能够直接处理的数据类型主要包括以下几种:

整数

  • 表示整数,既可以是正数也可以是负数,不带小数部分。
  • 例如:10, -20, 0
  • Python 中整型数据的大小不受限制,理论上可以表示任意大小的整数。
  • 允许在数字中间以_分隔,因此,写成10_000_000_000和10000000000是完全一样的
1
2
3
a = 10
b = 20
print(a + b) # 30

浮点数

  浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

  • 表示带有小数点的数值,也称为“实数”。
  • 例如:3.14, -0.001, 2.0。
  • 浮点数是用科学计数法表示的,Python 中浮点数的精度依赖于计算机的硬件实现。
1
2
3
pi = 3.14
radius = 5
print(radius * pi) # 15.7

字符串

  字符串是以单引号'或双引号"括起来的任意文本,比如’abc’,“xyz"等等。请注意,’'或”"本身只是一种表示方式,不是字符串的一部分,因此,字符串’abc’只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I’m OK"包含的字符是I,’,m,空格,O,K这6个字符。

1
str = 'I\'m \"OK\"!' # I'm "OK"!
  • 表示由字符组成的文本数据,用单引号 ’ ’ 或双引号 " " 括起来。
  • 例如:“Hello”, ‘Python’。
  • 字符串可以包含任意字符,包括字母、数字、符号等。
常用转义符
转义符 说明
\n 换行
\t 制表符
\ \转义
'转义
" "转义

布尔值

  布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写)。

  • 布尔类型表示逻辑值,只有两个值:True(真)和 False(假)。
  • 布尔类型通常用于条件判断和逻辑运算。
1
2
print(3 > 2) # True
print(3 > 4) # False

空值

  空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

变量

  变量是编程中的一种用于存储和表示数据的命名容器。变量相当于给数据起了一个名字,方便程序员在后续代码中引用和操作这些数据。变量可以存储各种类型的值,如数字、字符串、列表等,并且可以随时修改其存储的值。

  • 命名标识符:变量名是用于标识数据的标识符,它必须是唯一的,并且遵循命名规则。
  • 存储值:变量用于存储值,可以是整数、浮点数、字符串、布尔值、对象等。
  • 动态性:在 Python 中,变量的类型不固定,可以根据存储的值动态改变。例如,变量可以先存储一个整数,后面再存储一个字符串。

  变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头,比如:

1
2
3
a = 1
t_9527 = 9527
Answer = True

常量

  常量是指在程序运行过程中其值保持不变的量。与变量不同,常量的值在定义后不允许修改,用于表示那些在程序中不会发生变化的数据。

  • 值不可变:常量的值一旦被赋值,就不能在程序的执行过程中更改。
  • 用于固定值:常量通常用于表示那些在逻辑上不会改变的数值或信息,例如数学中的 π(圆周率),或者物理中的重力加速度。
1
2
3
PI = 3.14159        # 圆周率
GRAVITY = 9.8 # 重力加速度
MAX_USERS = 1000 # 最大用户数

字符串和编码

字符编码

  字符编码是一种规则,用于将字符(如字母、数字、符号等)转换为计算机可以处理的二进制数值形式,反之亦然。计算机只能理解二进制数据,而字符编码就是将人类语言字符转化为计算机可理解的数字编码的方式。

字符编码的发展过程:

  1. ASCII (American Standard Code for Information Interchange)
    • 简介:ASCII 是最早的字符编码之一,用于将英文字符转换为数字编码。
    • 特点:
      • 使用 7 位二进制编码,最多可表示 128 个字符。
      • 包括英文字母(大小写)、数字、标点符号及一些控制字符(如换行符)。
      • 例如:A 的 ASCII 编码是 65,a 是 97。
    • 局限性:ASCII 仅适用于英语字符,无法表示其他语言的字符(如中文、阿拉伯文等)。
  2. 扩展 ASCII
    • 简介:为了解决 ASCII 表示字符有限的问题,后来扩展为 8 位(1 字节)的编码,共 256 个字符。
    • 用途:增加了一些欧洲语言的符号和特殊字符(如法语、德语等)。
  3. ISO-8859 系列
    • 简介:ISO-8859 系列是为支持多种欧洲语言设计的编码标准,它基于扩展 ASCII。
    • 特点:ISO-8859-1 是最常见的版本,也称为“Latin-1”,用于表示西欧语言中的字符。
  4. Unicode
    • 简介:Unicode 是为了解决 ASCII 和其他编码方案无法表示全球所有字符的问题而设计的通用字符编码标准。
    • 特点:
      • 广泛性:Unicode 试图为每个字符、符号、标点符号等分配唯一的编码,无论语言种类如何。
      • 统一性:在 Unicode 中,世界各地的文字(如中文、日文、韩文、阿拉伯文等)都可以被表示。
      • Unicode 码点以 U+ 开头,例如:字母 A 的 Unicode 码点是 U+0041,汉字 “你” 的 Unicode 码点是 U+4F60。
  5. UTF-8, UTF-16, UTF-32
    • UTF (Unicode Transformation Format) 是 Unicode 的编码实现方式。
    • UTF-8:
      • 简介:UTF-8 是 Unicode 的一种变长字符编码方式,它使用 1 到 4 个字节来表示字符。
      • 特点:对于 ASCII 范围内的字符(如英文字母),UTF-8 只使用 1 个字节。而对于较大的字符(如汉字),则使用更多字节。
      • 优势:UTF-8 兼容 ASCII,节省空间,并且是目前互联网最常用的字符编码格式。
    • UTF-16:
      • 简介:UTF-16 使用 2 到 4 个字节来编码字符。
      • 特点:对大多数常见字符,UTF-16 使用 2 个字节,对于较复杂的字符,使用 4 个字节。
    • UTF-32:
      • 简介:UTF-32 使用固定 4 个字节表示每个字符。
      • 特点:虽然简单(每个字符固定长度),但会浪费较多空间,因此较少使用。

字符编码的作用:

  • 数据存储与传输:字符编码用于在文件、数据库、网络通信中存储和传输文本数据。
  • 多语言支持:字符编码使计算机能够处理多种语言的文本内容,尤其是 Unicode,支持全球几乎所有的语言。

Python中的字符串

  在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言,例如:

1
print('包含中文的english') # 包含中文的english

  对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:

1
2
3
4
5
6
7
8
>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(20013)
'中'

  由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。

  反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法。并且如果bytes中包含无法解码的字节,decode()方法会报错:

格式化

占位符

  在Python中,采用的格式化方式和C语言是一致的,用%实现,举例如下:

1
2
name = 'dabai'
print('Hello,%s',name)
常见的占位符
占位符 替换内容
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
format()

  另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0}、{1}……,不过这种方式写起来比%要麻烦得多:

1
2
>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成绩提升了 17.1%'
f-string

  最后一种格式化字符串的方法是使用以f开头的字符串,称之为f-string,它和普通字符串不同之处在于,字符串如果包含{xxx},就会以对应的变量替换:

1
2
3
4
>>> r = 2.5
>>> s = 3.14 * r ** 2
>>> print(f'The area of a circle with radius {r} is {s:.2f}')
The area of a circle with radius 2.5 is 19.62

  上述代码中,{r}被变量r的值替换,{s:.2f}被变量s的值替换,并且:后面的.2f指定了格式化参数(即保留两位小数),因此,{s:.2f}的替换结果是19.62。