在 Python 编程中,复数(Complex Number)是一种容易被忽略但却十分重要的数据类型,尤其在科学计算、信号处理、工程数学等领域有着广泛应用。不同于实数,复数由实部和虚部组成,格式为
a + bj(其中a是实部,b是虚部,j表示虚数单位,等价于数学中的i)。本文将从零开始,详细讲解 Python 中复数的创建方式与核心运算方法,帮助初学者彻底掌握这一知识点。一、复数的基本概念
在数学中,复数的标准形式为 ,其中:
- 为实部(Real Part),是普通的实数;
- 为虚部(Imaginary Part),也是实数;
- 为虚数单位,满足 。
在 Python 中,虚数单位使用
j(小写)表示(注意不能用i),这是因为在电子工程领域,j更常用作虚数单位,Python 的设计也兼容了这一行业习惯。二、Python 中复数的创建方式
Python 提供了多种创建复数的方法,从直接字面量定义到内置函数调用,满足不同场景的需求。
2.1 直接字面量创建
这是最直观、最常用的方式,直接按照
实部+虚部j的格式定义,注意虚部的j必须存在(即使虚部为 1,也不能省略)。python
运行
# 示例1:基础创建
z1 = 3 + 4j # 实部3,虚部4
z2 = 5 - 2j # 实部5,虚部-2
z3 = 0 + 7j # 纯虚数,实部为0
z4 = 8 + 0j # 实部为8,虚部为0(等价于实数8,但类型仍是复数)
z5 = -2 - 3j # 实部和虚部均为负数
# 查看类型和值
print(f"z1的值:{z1},类型:{type(z1)}") # 输出:z1的值:(3+4j),类型:<class 'complex'>
print(f"z3的值:{z3},类型:{type(z3)}") # 输出:z3的值:7j,类型:<class 'complex'>
注意事项:
- 虚部的
j必须小写,大写J虽然也能识别,但不符合 Python 规范; - 若虚部为 1 或 – 1,不能简写为
j或-j,必须写1j或-1j(如1+1j,而非1+j)。
2.2 使用 complex () 函数创建
Python 内置的
complex()函数是创建复数的通用方法,语法为:python
运行
complex(real, imag)
real:必填,复数的实部(可以是整数、浮点数);imag:可选,复数的虚部,默认值为 0。
python
运行
# 示例2:使用complex()函数创建
z6 = complex(2, 5) # 实部2,虚部5 → 2+5j
z7 = complex(9) # 仅指定实部,虚部默认0 → 9+0j
z8 = complex(-3, -4) # 实部-3,虚部-4 → -3-4j
z9 = complex(0, 8) # 纯虚数 → 8j
print(f"z6 = {z6}") # 输出:z6 = (2+5j)
print(f"z9 = {z9}") # 输出:z9 = 8j
2.3 从字符串创建复数
complex()函数还支持从符合复数格式的字符串创建复数,注意字符串中不能包含空格。python
运行
# 示例3:从字符串创建
z10 = complex("4+7j")
z11 = complex("-1-2j")
z12 = complex("8j") # 纯虚数字符串
print(f"z10 = {z10}") # 输出:z10 = (4+7j)
print(f"z11 = {z11}") # 输出:z11 = (-1-2j)
# 错误示例:字符串包含空格会报错
# z13 = complex("3 + 4j") # 抛出ValueError: complex() arg is a malformed string
三、复数的核心运算方法
Python 支持复数的所有基本数学运算,包括加减乘除、幂运算、共轭运算等,语法与实数运算完全一致,无需额外处理。
3.1 基本算术运算(加减乘除)
复数的算术运算遵循数学中的复数运算规则,Python 会自动处理实部和虚部的计算。
python
运行
# 定义两个基础复数
a = 3 + 4j
b = 1 + 2j
# 1. 加法:实部相加,虚部相加
add_result = a + b
print(f"{a} + {b} = {add_result}") # 输出:(3+4j) + (1+2j) = (4+6j)
# 2. 减法:实部相减,虚部相减
sub_result = a - b
print(f"{a} - {b} = {sub_result}") # 输出:(3+4j) - (1+2j) = (2+2j)
# 3. 乘法:(a+bj)(c+dj) = (ac-bd) + (ad+bc)j
mul_result = a * b
print(f"{a} * {b} = {mul_result}") # 输出:(3+4j) * (1+2j) = (-5+10j)
# 4. 除法:遵循复数除法规则,结果会自动化简
div_result = a / b
print(f"{a} / {b} = {div_result}") # 输出:(3+4j) / (1+2j) = (2.2-0.4j)
3.2 幂运算
使用
**运算符可以实现复数的幂运算,支持整数、浮点数甚至复数次幂。python
运行
# 幂运算示例
c = 2 + 3j
# 平方运算
pow2_result = c **2
print(f"{c}² = {pow2_result}") # 输出:(2+3j)² = (-5+12j)
# 立方运算
pow3_result = c** 3
print(f"{c}³ = {pow3_result}") # 输出:(2+3j)³ = (-46+9j)
# 开平方(0.5次幂)
sqrt_result = c **0.5
print(f"{c}的平方根 = {sqrt_result}") # 输出:(2+3j)的平方根 = (1.6741492280355401+0.8959774761298381j)
3.3 共轭复数
复数的共轭是指将虚部符号取反,Python 中可以通过复数的
conjugate()方法实现。共轭复数在除法运算、模长计算中常用。python
运行
# 共轭复数示例
d = 5 - 6j
conj_d = d.conjugate()
print(f"{d}的共轭复数 = {conj_d}") # 输出:(5-6j)的共轭复数 = (5+6j)
# 验证:复数 × 其共轭 = 实部² + 虚部²(实数)
mul_conj = d * conj_d
print(f"{d} × {conj_d} = {mul_conj}") # 输出:(5-6j) × (5+6j) = (61+0j)
3.4 获取实部和虚部
复数对象提供了
real和imag两个属性,可直接获取实部和虚部的数值(返回浮点数类型)。python
运行
# 获取实部和虚部
e = 7 + 8j
real_e = e.real # 实部
imag_e = e.imag # 虚部
print(f"{e}的实部:{real_e},类型:{type(real_e)}") # 输出:(7+8j)的实部:7.0,类型:<class 'float'>
print(f"{e}的虚部:{imag_e},类型:{type(imag_e)}") # 输出:(7+8j)的虚部:8.0,类型:<class 'float'>
3.5 复数的模长
复数的模长(绝对值)是指 ,可以通过
abs()函数计算。python
运行
# 模长计算
f = 3 + 4j
mod_f = abs(f)
print(f"{f}的模长 = {mod_f}") # 输出:(3+4j)的模长 = 5.0
# 验证:模长的平方 = 实部² + 虚部²
print(f"模长平方:{mod_f**2},实部²+虚部²:{3**2 + 4**2}") # 输出:模长平方:25.0,实部²+虚部²:25
四、复数的实际应用场景
复数并非仅存在于理论中,在实际开发中常见应用场景包括:
- 科学计算:如求解二次方程的虚根、电路分析中的阻抗计算;
- 信号处理:傅里叶变换(FFT)中大量使用复数表示频域信号;
- 图形学:旋转矩阵的计算、复数平面的坐标变换;
- 机器学习:部分算法(如复数神经网络)的实现。
五、常见注意事项
- 虚数单位必须用小写
j,虽然大写J暂时可用,但不符合 PEP8 规范,易引发兼容性问题; - 复数运算返回的结果始终是
complex类型,即使虚部为 0(如8+0j); - 并非所有数学函数都支持复数,如
math模块的函数大多只支持实数,需使用cmath模块处理复数的数学运算(如cmath.sin()、cmath.log()); - 字符串创建复数时,字符串内不能包含空格,否则会抛出
ValueError。
总结
- Python 中创建复数主要有三种方式:直接字面量定义、
complex()函数创建、字符串解析创建,其中字面量定义是最常用的方式; - 复数支持所有基础算术运算(加减乘除、幂运算),还可通过
conjugate()获取共轭复数、abs()计算模长、real/imag获取实虚部; - 复数在科学计算、信号处理等领域不可或缺,掌握其基础用法是进阶 Python 工程开发的必要条件。
通过本文的讲解,相信你已经掌握了 Python 复数的核心用法。在实际开发中,若涉及复数的高级运算(如三角函数、对数),可进一步学习
cmath模块,它是 Python 专为复数设计的数学库,能满足更复杂的计算需求。