字面量
约 1709 字大约 6 分钟
2025-04-03
字面量简单来说就是直接在程序中写出来的值。Python 的字面量包括数字(整数、浮点数、虚数)、布尔值、None、字符串,等等。Python 的字面值都是不可变数据类型。字符串./string.md 因为要讲的内容实在太多,后面会详细讨论,这里暂时就先不介绍了
- 数字
- 布尔值
- None
- 1跑一遍 3 / 2 和 3 // 2,记牢 / 永远得浮点,// 才是整数除法。
- 2用 bin(11) 看二进制表示,再用 int('1011', 2) 转回去,理解两个方向的进制转换。
- 3对 float('nan') 试 ==、<、>,确认所有比较都是 False —— 所以判 NaN 要用 math.isnan。
- 4试 1 == True 和 1 is True,看到一个 True 一个 False —— bool 是 int 子类但不是同一个对象。
- 5用 if a is None 而不是 a == None 判空,养成习惯。
字面量简单来说就是直接在程序中写出来的值。Python 的字面量包括数字(整数、浮点数、虚数)、布尔值、None、字符串,等等。Python 的字面值都是不可变数据类型。字符串 因为要讲的内容实在太多,后面会详细讨论,这里暂时就先不介绍了
数字
Python 的数字有三种:整数、浮点数和虚数,构造函数分别为 int、float 和 complex。
整数
整型数字在 Python 中的关键字是 int,整形在计算机中用于计算和比较。
在 Python 中,整数字面值的长度没有限制,能一直大到占满可用内存。
在 Python3 中,整型统统使用 int。在 Python2 中,较小的整形函数也用 int,但是对于数值很大的整型,需要使用 long。
在 Python2 中,数值较大的整型数据结尾可能 会出现一个 L 标识,例如 321312321L。在 Python3 中,无论数值有多大,都不会出现这种标识。
整数在 Python 中的构造函数为 int,基本操作如下:
python playground
a = 10
b = 5
print(-b) # 相反数
print(a - b)
print(a + b)
print(a * b) # 乘
print(a / b) # 除(结果为浮点数)
print(a // b) # 地板除(结果为整数,向下取整)10 进制转换为 2 进制
整除 2,获取余数,将余数从下向上整合。例如求 11 的二进制数:
除数 余数
11 1
5 1
2 0
1 1
0于是,11 的二进制数就是 1011。
2 进制转换为 10 进制
从右向左,每一位的权重是 2**(位数 - 1)。位数是从右向左数到的次序。例如,倒数第一位的权重是 2**0,即 1,倒数第二位的权重为 2**1,即 2。将二进制转换为十进制,只需要将二进制每一位的数值乘以改为的权重然后将它们想加到一起即可。例如,我们可以这样计算二进制数 1011 的十进制数值:
1 * 2 ** 0 + 1 * 2 ** 1 + 0 * 2 ** 2 + 1 * 2 ** 3
= 1 + 2 + 0 + 8
= 11使用 Python 进行进制转换
bin(<十进制数>):将十进制数转换成二进制(常用)int("字符串", 2):将某个进制(示例中为二进制)转换为十进制
示例如下:
python playground
print(bin(11)) # '0b1011'
print(int('1011', 2)) # 11浮点数
一些浮点数(实数)字面值的示例如下:
3.14 10. .001 1e100 3.14e-10 0e0 3.14_15_93需要注意的是 Python 中普通除法的结果是浮点数,即便除数和被除数都是整数,哪怕能够整除。要得到整数需要使用地板除:
print(2 / 1) # 2.0
print(3 // 2) # 1NaN
NaN 即 not a number,是一个特殊的 float 类型的数值,表示某个变量值不是数值类型。Python 中可通过如下方法创建 NaN:
python playground
import math
math.nan
float('nan')
float('Nan') # 不区分大小写NaN 可以执行算术运算,但是运算的结果仍然是 NaN:
python playground
a = float('nan')
print(a + 1)
print(a / 2)
print(a * 0)
print(a - a)NaN 也可以执行比较运算,但是比较运算的结果都是 False:
python playground
a = float('nan')
print(a > 0)
print(a == 0)
print(a < 0)可以使用 math.isnan 判断某个值是否是 NaN:
python playground
import math
a = float('nan')
b = -1
print(math.isnan(a)) # True
print(math.isnan(b)) # False无穷大
无穷大 inf 也是一个特殊的 float 类型的数值。无穷大有符号,正无穷大比任意数字都大,负无穷大笔任意数字都小。Python 中可通过如下方法创建无穷大:
python playground
import math
# 正无穷大
math.inf
float('inf')
float('Inf') # 不区分大小写
# 负无穷大
-math.inf
float('-inf')
-float('inf')
float('-Inf') # 不区分大小写无穷大的比较运算是基本符合逻辑的:
python playground
a = float('inf')
b = -a
print(a == a) # True
print(a > 100000000000000000) # True
print(a == b) # False
print(a == -b) # True
print(b < -100000000000000000) # True无穷大也支持算术运算,运算结果可能是无穷大或者 NaN:
python playground
a = float('inf')
b = -a
print(a + 1) # inf
print(a * 2) # inf
print(a - 100000000000000000) # inf
print(a / 100000000000000000) # inf
print(a + b) # nan
print(a / a) # nan
print(a / b) # nan可以使用 math.isninf 判断某个值是否是无穷大:
python playground
import math
a = float('inf')
b = -a
c = 1
print(math.isinf(a)) # True
print(math.isinf(b)) # True
print(math.isinf(c)) # False虚数
虚数(复数)由一对浮点数表示,它们的取值范围相同。创建实部不为零的复数,则需添加浮点数,例如 (3+4j)。虚数字面值示例如下:
3.14j 10.j 10j .001j 1e100j 3.14e-10j 3.14_15_93j布尔值
布尔值在编程中用来表示真假。在 Python 中,真 用 True 表示;假 用 False 表示。只有 Python 中的 True 和 False 的首字母是大写的。示例如下:
python playground
print(3 > 2) # True 成立
print(2 > 3) # False 不成立需要注意的是,Python 中的布尔值是 int 的子类。在许多数字场景下,False 和 True 的行为分别与整数 0 和 1 类似。但是,不建议这样使用:
python playground
print(1 == True) # True
print(0 == False) # True
print(0.0 == False) # True
print(int(True)) #1
print(int(False)) # 0
print(1 is True) # False
print(0 is False) # FalseNone
表示空,布尔运算时为假。判断一个对象是否为 None 应该这么写:
if a is None: # 不要写成 a == None
pass- Python3 整数没有大小限制,/ 总是返回浮点数,需要整数结果用 //。
- NaN 是特殊浮点:和谁比较都得 False,判定必须用 math.isnan,不能 == 。
- 正负 inf 可以参与算术,但 inf - inf、inf / inf 这类不定型会得到 NaN。
- bool 是 int 的子类,True/False 在算术里等同 1/0,但判 None 永远用 is,不用 == 。
版权所有
版权归属:Shuo Liu
