Python怎么定义数字变量:整数与浮点数赋值示例
详细讲解Python中如何定义数字变量,通过清晰的代码示例演示整数与浮点数的赋值方法、内存引用机制、类型查看与转换规则,以及避免浮点精度和语法陷阱的实用建议。
在 Python 中定义数字变量非常直接:无需提前声明类型,只需指定变量名称、使用等号 = 作为赋值运算符,并在右侧写入具体的数值即可。Python 解释器在运行时会自动执行类型推断——不带小数点的数值会被自动识别为整数(int),带有小数点或科学计数法的数值会被自动识别为浮点数(float)。
一、定义数字变量的基本语法与赋值流程
变量是程序中用来指代数据并参与运算的名称。在许多静态类型语言(如 C 或 Java)中,定义变量必须先写明类型关键字,例如 int count = 10;。但在 Python 中,类型属于内存中的数据对象,变量本身只是贴在对象上的“名称标签”。
1. 变量命名规则
为数字变量起名时,需要遵循 Python 的合法标识符规范:
- 变量名只能包含字母(大写或小写)、数字以及下划线
_; - 变量名的首字符必须是字母或下划线,不能以数字开头(例如
1score是非法的,而score1是合法的); - 严格区分大小写,
price、Price和PRICE分别代表三个互不相干的独立变量; - 不能使用 Python 的内置保留关键字作为变量名(例如
if、def、class、for等)。
2. 最基础的赋值示例
定义单个数字变量的语法格式为:变量名 = 数值。以下代码演示分别定义一个整数与一个浮点数:
# 定义一个整数变量(记录数量)
item_count = 25
# 定义一个浮点数变量(记录单价)
unit_price = 19.99
# 打印变量的值
print("商品数量:", item_count)
print("商品单价:", unit_price)
# 检验变量所属的类型
print("item_count 的类型是:", type(item_count))
print("unit_price 的类型是:", type(unit_price))
商品单价: 19.99
item_count 的类型是: <class 'int'>
unit_price 的类型是: <class 'float'>
3. 多变量赋值的两种快捷写法
在实际编码中,如果需要同时对多个变量赋值,Python 提供了简洁的批量赋值语法:
- 多变量同值赋值(链式赋值):当多个变量初始值完全相同时,可以使用连续等号。例如
x = y = z = 0,这会让三个变量同时指向同一个整型对象0。 - 多变量多元赋值(解包赋值):用逗号在一行中同时为多个变量赋予不同的值。例如
width, height, ratio = 1920, 1080, 1.78。等号左侧的变量数量必须与右侧数值的数量严格一致。
如图 1 所示,当我们写下一行 total_score = 98.5 时,Python 解释器在幕后完成了一整套严谨的流水线作业:先对左侧标识符进行语法规则检查,接着对右侧字面量进行词法解析并确定其为 float 类型,随后在内存堆中实例化出该数据对象,最终在当前命名空间中记录变量名并建立指向该对象的指针引用。
二、整数(int)的赋值方式与特性
整数在 Python 中对应的类型是 int。它可以表示任意大小的正整数、负整数或零。与日常生活中的数学计数完全一致,整数不包含任何小数部分。
1. 常用整数赋值方式
除常规书写正负整数外,Python 还支持通过内置字面量前缀直接赋值二进制、八进制和十六进制整数:
# 1. 常规十进制正负整数
positive_num = 120
negative_num = -45
zero_num = 0
# 2. 其它进制的整数赋值(以 0b / 0o / 0x 为前缀)
bin_val = 0b1010 # 二进制,对应十进制的 10
oct_val = 0o755 # 八进制,对应十进制的 493
hex_val = 0x1A # 十六进制,对应十进制的 26
print("二进制转换十进制:", bin_val)
print("十六进制转换十进制:", hex_val)
十六进制转换十进制: 26
2. 大整数与数字下划线分隔符
当数字位数较长时(例如千万、百亿),直接查看连续的一长串数字很容易数错位数。Python 3.6 及更新版本引入了下划线 _ 作为数字字面量分隔符(遵循 PEP 515)。
例如,可以将 1000000000 书写为 1_000_000_000。下划线在解析时会被解释器自动忽略,它仅仅为了提升开发者的代码可读性,其实际存储的数值和性能开销完全相同。
3. Python 整数的“任意精度”优势
在 C 或 Java 中,整型变量通常被限制为 32 位(最大约 21 亿)或 64 位,计算结果一旦超出范围就会发生溢出报错或循环回绕。而 Python 3 中的 int 实现了动态任意精度算法(底层为 PyLongObject),只要物理内存允许,整数可以无限增长,永远不会因为数字过大而溢出。
# 即使是极巨大的整数幂运算,Python 也能精准表达
huge_number = 2 ** 100
print("2 的 100 次方取值:")
print(huge_number)
print("类型依然是:", type(huge_number))
1267650600228229401496703205376
类型依然是: <class 'int'>
三、浮点数(float)的赋值方式与底层原理
浮点数在 Python 中对应的类型是 float,专门用于表示包含小数部分的实数。只要数值的书写形式中出现了小数点,即便小数点后是 0,Python 也会将其作为浮点数处理。
1. 浮点数的赋值书写方式
定义浮点数主要有以下两种写法:
- 标准小数形式:例如
pi = 3.14159、discount = 0.85。若整数部分为 0,可以简写为.85;同理,5.也等价于5.0(但建议保留前后的数字以增强代码可读性)。 - 科学计数法形式:使用字母
e或E表示以 10 为底的指数。例如1.5e3代表 \(1.5 imes 10^3 = 1500.0\),2.8e-4代表 \(2.8 imes 10^-4 = 0.00028\)。通过科学计数法赋值的数字,其类型始终为float。
如图 2 所示,当执行 a = 100 并紧接着执行 b = a 时,Python 并不会在内存中复制一份新的数值 100,而是将变量标签 b 指向已经存在的同一个整数对象,该对象的引用计数随之增加;当执行 rate = 3.14 时,解释器单独分配一个类型为 float 的对象实体。这种内存模型保证了数值传递与引用的高效率。
2. 浮点数在底层的存储精度与特性
Python 的 float 在底层采用 C 语言的 double 实现,严格遵循 IEEE 754 双精度(64位)浮点数标准。其中 1 位符号位,11 位指数位,52 位尾数(有效数字位)。
由于计算机内部全部采用二进制存储,而某些十进制小数(例如 0.1 或 0.2)转换成二进制后是无限循环小数,因此在 53 位精度截断后会产生极微小的舍入差异:
a = 0.1
b = 0.2
result = a + b
print("0.1 + 0.2 的计算结果:", result)
print("直接判断 a + b == 0.3 的结果:", result == 0.3)
直接判断 a + b == 0.3 的结果: False
== 比较两个浮点数是否相等。建议使用标准库 math.isclose(a, b) 进行容差比较;若是货币、金融结算等对精度有绝对要求的场景,应当使用标准库模块 decimal.Decimal 代替浮点数赋值。
四、整数与浮点数的类型转换与运算规则
在实际编写逻辑时,整数与浮点数往往需要协同运算,或者需要在两者之间进行类型强制转换。
1. 强制类型转换函数
Python 提供了 int() 和 float() 两个内置函数来实现数值类型间的相互显式转换:
int(x):将浮点数转换为整数。转换过程是直接截断小数部分(向零取整),不会进行四舍五入。例如int(3.99)的结果是3,int(-2.8)的结果是-2。float(x):将整数转换为浮点数。数值保持不变,并在末尾追加.0。例如float(8)的结果是8.0。
2. 混合运算与类型自动提升
当整数与浮点数共同参与算术运算(如加、减、乘)时,Python 会自动将整数隐式提升(Coercion)为浮点数,再进行运算,最终输出的结果必定是 float。
3. Python 中除法操作的特殊机制
除法是区分整数与浮点数行为的最典型场景。Python 区分了两种除法运算符:
| 运算符 | 运算名称 | 表达式示例 | 结果与返回类型 | 规则说明 |
|---|---|---|---|---|
/ |
真除法 (True Division) | 8 / 2 |
4.0 (float) |
无论两个操作数是否能整除,结果一律返回浮点数 |
// |
整除 / 地板除 (Floor Division) | 7 // 2 |
3 (int) |
只保留商的整数部分,向下取整(朝负无穷方向舍入) |
// |
整除(含浮点数参与) | 7.5 // 2 |
3.0 (float) |
只要操作数有浮点,结果保持地板除但形式提升为浮点 |
% |
取模 / 余数 (Modulo) | 7 % 2 |
1 (int) |
计算除法后的余数,满足 a == (a // b) * b + (a % b) |
五、定义数字变量时的常见误区与避坑自查
初学者在定义数字变量时,常因语法细节疏忽而导致程序行为异常。以下归纳了最常见的三类错误及正确的排查方法:
误区一:习惯性给数字加上引号
在 Python 中,被单引号 '...' 或双引号 "..." 包裹的任何内容都会被识别为文本字符串(str),而不是数字。
例如写出 score = "90" 时,score 是字符串;此时执行 score + 10 会直接抛出 TypeError: can only concatenate str (not "int") to str。
正确解法:数字变量两端绝对不要加引号;如果是从输入或网络请求中拿到的数字文本,必须先显式调用 int("90") 或 float("90.5") 转为数值后再进行计算。
误区二:在千位数字中使用英文逗号
许多人在书写大数字时习惯像英语数字那样加上逗号分隔,例如 target_revenue = 1,000,000。在 Python 中,逗号不是数字分隔符,而是元组(tuple)的构造运算符。
这行代码会导致 target_revenue 实际被赋值为一个三元组 (1, 0, 0),后续的数学运算都会崩溃。
正确解法:若要增加千分位可读性,务必使用下划线 target_revenue = 1_000_000。
误区三:浮点数格式化输出与展示混淆
有时为了展示美观需要保留两位小数,部分初学者会误以为定义变量时就要“截断”小数位。实际上,变量在内存中应始终保持完整精度,只在最终向用户展示或输出文本时才进行格式化:
raw_rate = 0.125678
# 变量在内存中完整保留精度,运算不丢失有效信息
computed_val = raw_rate * 1000
# 仅在打印输出时格式化为两位小数
print(f"展示费率: {raw_rate:.2%}")
print(f"保留两位小数数值: {raw_rate:.2f}")
保留两位小数数值: 0.13
总结
在 Python 中定义数字变量的核心原则可以归结为:“直接赋值,自动推断”。整数(int)天然具备任意精度,适合计数、索引及精确离散运算;浮点数(float)基于 IEEE 754 双精度标准,适合科学计算与连续实数运算。编写代码时,合理运用下划线提高可读性,区分好 / 真除法与 // 整除,并在需要比较浮点数时规避直接判等,即可高效、稳健地完成各类数值处理任务。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









