词法单元:字面量 - 数据的基本表示
字面量(Literals)是编程语言中用于直接表示固定值的基本词法单元。可以将它们视为程序中的常量值,直接嵌入在源代码中,无需计算即可确定其值。掌握字面量对于理解 Python 代码至关重要,因为它们是初始化变量、进行比较和构建更复杂数据结构的基础。
Python 提供了多种类型的字面量,每种类型用于表示不同种类的数据。下面我们来详细了解 Python 中的各种字面量类型。
数字字面量: 数值的表达方式
数字字面量用于表示数值。Python 支持整数、浮点数和虚数三种类型的数字字面量。
整数字面量:没有小数点的数字
整数字面量表示没有小数部分的整数。Python 允许使用不同的进制(基数)来表示整数:
i. 十进制(基数-10)整数:
这是我们日常生活中最常用的数字表示方式。十进制整数字面量由一个或多个数字(0-9)组成。需要注意的是,除了数字 0 本身之外,十进制整数不能以 0 开头。
# 有效的十进制整数字面量
34
3283298
864
0
# 无效的十进制整数字面量
# 092 # 报错:不允许前导零
ii. 二进制(基数-2)整数:
二进制整数以 0b
或 0B
开头,后跟二进制数字 0 和 1。二进制在计算机科学中非常重要,因为它是计算机内部表示数据的方式。
例如,十进制数 27 可以表示为二进制整数 0b11011
。
binary_number = 0b11011
print(binary_number) # 输出: 27
iii. 八进制(基数-8)整数:
八进制整数以 0o
或 0O
开头,后跟八进制数字 0 到 7。
例如,十进制数 27 可以表示为八进制整数 0o33
。
octal_number = 0o33
print(octal_number) # 输出: 27
iv. 十六进制(基数-16)整数:
十六进制整数以 0x
或 0X
开头,后跟数字 0-9 和字母 A-F(或 a-f,不区分大小写)。十六进制常用于表示内存地址和颜色代码。
例如,十进制数 27 可以表示为十六进制整数 0x1B
或 0x1b
。
hexadecimal_number = 0x1B
print(hexadecimal_number) # 输出: 27
总而言之,同一个数值可以用不同的进制来表示,例如十进制 27 可以写成 27
(十进制), 0b11011
(二进制), 0o33
(八进制), 或 0x1B
(十六进制)。Python 会自动将它们转换为十进制进行处理。
整数字面量中的下划线:
为了提高可读性,Python 允许在整数字面量中使用下划线 _
来对数字进行分组。下划线可以出现在数字之间,也可以出现在基数说明符(如 0b
)之后。Python 在确定字面量的实际数值时会忽略下划线。
large_number = 10_000_000 # 1000万,更容易阅读
binary_with_underscores = 0b_1111_0000 # 二进制数,用下划线分隔
hex_with_underscores = 0xAF_12_BC # 十六进制数
print(large_number, binary_with_underscores, hex_with_underscores)
浮点数字面量:带小数点的数字
浮点数字面量用于表示实数,也就是带有小数部分的数字。它们可以包含小数部分和/或指数部分。
- 小数部分: 指的是小数点(
.
)后面的数字。
3.14
0.5
.75 # 等同于 0.75
5.
- 指数部分: 使用字母
e
或E
后跟一个可选的符号(+
或-
)和一个整数来表示。指数部分表示将前面的数乘以 10 的多少次幂。
3.14E2 # 等同于 3.14 * 10^2 = 314.0
2.5e-3 # 等同于 2.5 * 10^-3 = 0.0025
虚数字面量:复数的组成部分
为了处理复数,Python 引入了虚数字面量。虚数字面量由一个实数或整数后跟字母 j
或 J
构成,其中 j
或 J
代表单位虚数(即根号 -1)。
3.5j
15.j
12j
.005j
3e100j
3.5e-10j
重要注意事项:
- 复数字面量: Python 没有直接表示复数的字面量。复数是通过将实数(整数或浮点数字面量)与虚数(虚数字面量)组合成表达式来创建的。例如,
1 + 2j
表示一个复数,其中 1 是实部,2j 是虚部。
complex_number = 1 + 2j
print(complex_number) # 输出: (1+2j)
- 负号: 数字字面量本身不包含负号 (
-
)。负号实际上是一个一元运算符,用于对字面量取负。例如,在表达式-3.14
中,3.14
是字面量,而-
是一个运算符。
布尔字面量: 真与假
True
和 False
是 Python 中的布尔字面量,用于表示真值和假值。它们是 Python 中仅有的两个布尔值,在逻辑运算和条件判断中扮演着关键角色。
is_true = True
is_false = False
if is_true:
print("This is true")
else:
print("This is false")
字符串字面量: 文本的表示
字符串字面量用于表示文本数据。在 Python 中,可以使用以下方式来定义字符串:
- 单引号:
'Hello, world!'
- 双引号:
"Hello, world!"
- 三引号:
'''This is a multi-line string'''
或"""This is also a multi-line string"""
三引号字符串可以跨越多行,方便表示包含换行符的文本。
single_quoted_string = 'This is a string in single quotes.'
double_quoted_string = "This is a string in double quotes."
multi_line_string = """This is a
string that spans multiple lines."""
print(single_quoted_string)
print(double_quoted_string)
print(multi_line_string)
转义字符:
反斜杠 (\
) 字符在字符串中具有特殊含义,用于转义其他字符。转义字符允许我们在字符串中包含一些无法直接输入的字符,例如换行符、制表符和引号。
转义序列 | 含义 |
---|---|
\\ | 反斜杠 (\ ) |
\' | 单引号 (' ) |
\" | 双引号 (" ) |
\n | 换行符 (newline) |
\t | 制表符 (tab) |
\r | 回车符 (carriage return) |
\b | 退格符 (backspace) |
\f | 换页符 (form feed) |
\v | 垂直制表符 (vertical tab) |
\a | 响铃符 (alert/bell) |
string_with_escapes = "This string contains a newline character: \nAnd a tab character: \t"
print(string_with_escapes)
在字符串中嵌入引号:
虽然可以使用 \'
和 \"
来转义引号,但更简单的方法是在单引号字符串中嵌入双引号,反之亦然。
string1 = 'My name is "Python".'
string2 = "Python's World"
print(string1)
print(string2)
Unicode 字符:
字符串字面量支持 Unicode 字符,可以使用 \u
转义序列后跟 4 位十六进制 Unicode 码来指定。
print("E = mc\u00B2") # 输出: E = mc²
\u00B2
表示 Unicode 字符“上标二”。Unicode 是一种国际标准,用于表示世界上几乎所有的字符。
特殊字面量: None
None
是 Python 中的一个特殊字面量,用于表示空值或缺少值。它类似于其他语言中的 null
或 nil
。None
不同于 0
,0
是一个表示数值零的整数,而 None
表示没有任何值。
my_variable = None
if my_variable is None:
print("The variable is None")
else:
print("The variable has a value")
当一个变量被赋值为 None
时,它表示该变量当前没有指向任何对象。
字面量集合(Displays):
Python 允许使用特殊的语法来创建字面量集合,也称为“displays”。这些语法可以用来快速创建列表、集合和字典等容器。
列表(List): 使用方括号
[]
创建一个有序的元素集合。pythonmy_list = ['a', 'b', 'c'] print(my_list)
集合(Set): 使用花括号
{}
创建一个无序且不包含重复元素的集合。pythonmy_set = {'a', 'b', 'c'} print(my_set)
字典(Dictionary): 使用花括号
{}
创建一个键值对的集合。pythonmy_dictionary = {'a': 1, 'b': 2, 'c': 3} print(my_dictionary)
我们将在后续章节中更详细地介绍列表、集合和字典。
通过理解和掌握这些字面量,你将能够更好地理解和编写 Python 代码,并能够更有效地处理各种数据类型。字面量是 Python 编程的基础,是构建更复杂程序的重要组成部分。