>>> from env_helper import info; info()
页面更新时间: 2023-12-29 22:20:46
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-16-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

1.11. 模块

可将模块视为扩展,通过将其导入可以扩展Python功能。要导入模块,可使用特殊命令 import 。 前一节提及的函数 floor 包含在模块 math 中。

>>> import math
>>> math.floor(32.9)
32

请注意其中的工作原理:我们使用 import 导入模块,再以 module.function 的方式使用模块 中的函数。 就这里执行的操作而言,也可像前面处理input的返回值那样,将这个数字转换为整数。

>>> int(32.9)
 32



注意:还有一些类似的函数,可用于转换类型,如 strfloat 。
实际上,它们并不是函数,而 是类。类将在本书后面更详细地介绍。

模块 math 还包含其他几个很有用的函数。例如, ceilfloor 相反,返回大于或等于给定数 的最小整数。

>>> math.ceil(32.3)
33
>>> math.ceil(32)
32

如果确定不会从不同模块导入多个同名函数,你可能不想每次调用函数时都指定模块名。在 这种情况下,可使用命令 import 的如下变种:

>>> from math import sqrt
>>> sqrt(9)
3.0

通过使用命令 import 的变种 from module import function ,可在调用函数时不指定模块前缀。

提示:事实上,可使用变量来引用函数(以及其他大部分Python元素)。 执行赋值语句 foo = math.sqrt 后,就可使用 foo 来计算平方根。例如, foo(4) 的结果为 2.0

1.11.1. cmath 模块和复数

函数 sqrt 用于计算平方根。下面来看看向它提供一个负数的情况:

>>> from math import sqrt
>>> sqrt(-1)
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

Cell In [12], line 1
----> 1 sqrt(-1)


ValueError: math domain error

在有些平台上,结果如下:

>>> sqrt(-1)
nan

注意 nan 具有特殊含义,指的是“非数值”(not a number)。

如果我们坚持将值域限定为实数,并使用其近似的浮点数实现,就无法计算负数的平方根。 负数的平方根为虚数,而由实部和虚部组成的数为复数。Python标准库提供了一个专门用于处理复数的模块。

>>> import cmath
>>> cmath.sqrt(-1)
1j

注意到这里没有使用 from ... import ... 。 如果使用了这种 import 命令,将无法使用常规函数 sqrt 。 类似这样的名称冲突很隐蔽,因此除非必须使用 from 版的 import 命令,否则应坚持使用常规版 import 命令。

1j 是个虚数,虚数都以 j (或 J )结尾。 复数算术运算都基于如下定义: -1 的平方根为 1j 。 这 里不深入探讨这个主题,只举一个例子来结束对复数的讨论:

>>> (1 + 3j) * (9 + 4j)
(-3+31j)

从这个示例可知,Python本身提供了对复数的支持。

注意:Python没有专门表示虚数的类型,而将虚数视为实部为零的复数。