首页
学习
活动
专区
工具
TVP
发布

Python基础教程1.8 模块

1.8 模块

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

>>> import math

>>> math.floor(32.9)

32

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

>>> int(32.9)

32

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

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

>>> 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.8.1 cmath 和复数

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

>>> from math import sqrt

>>> sqrt(-1)

Traceback (most recent call last):

...

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没有专门表示虚数的类型,而将虚数视为实部为零的复数。

1.8.2 回到未来

据说Python之父Guido van Rossum有一台时光机,因为这样的情况出现了多次:大家要求Python提供某项功能时,却发现这项功能早已实现。当然,并非什么人都能进入这台时光机,不过Guido很体贴,通过神奇模块__future__让Python具备了时光机的部分功能。对于Python当前不支持,但未来将成为标准组成部分的功能,你可从这个模块进行导入。这一点你在1.3节已经见识过,本书后面也将经常遇到这个模块。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180818G1409V00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券