3.3 用函数计算
算术运算符能完成的是基本运算,为了便于计算,数学上还定义了其他一些常见函数,比如三角函数、对数函数等。Python 语言中,也通过多种方式提供了常用的函数——这些函数都已经定义好。
3.3.1 内置函数
在3.1.1节曾使用过内置函数 type()
,那时只是为了当时需要而引出了这个术语,但未详细解释,下面对此术语进行完整地描述:Python 内置函数(Built-in Functions)是本地 Python 环境配置好之后就已经可以使用的函数,不需要单独定义。在第7章会学习定义函数的方法,而内置函数是已经定义好了的,拿过来就可使用,正所谓“开箱即用”,但数量有限,表3-3-1列出了 Python 3 的所有内置函数。
表3-3-1 Python 内置函数
abs() | delattr() | hash() | memoryview() | set() |
---|---|---|---|---|
all() | dict() | help() | min() | setattr() |
any() | dir() | hex() | next() | slice() |
ascii() | divmod() | id() | object() | sorted() |
bin() | enumerate() | input() | oct() | staticmethod() |
bool() | eval() | int() | open() | str() |
breakpoint() | exec() | isinstance() | ord() | sum() |
bytearray() | filter() | issubclass() | pow() | super() |
bytes() | float() | iter() | print() | tuple() |
callable() | format() | len() | property() | type() |
chr() | frozenset() | list() | range() | vars() |
classmethod() | getattr() | locals() | repr() | zip() |
compile() | globals() | map() | reversed() | __import__() |
complex() | hasattr() | max() | round() |
表3-3-1中的内容来自官方网站(https://docs.python.org/3/library/functions.html),图3-3-1是官方文档的截图。
图3-3-1 内置函数的官方文档
下面简要介绍其中与计算有关的几个函数,建议读者不仅仅了解这些函数的具体用法,更要从中体会自学之法。
int()
和 float()
int()
和 float()
两个内置函数与3.1节所学习过的两个内置对象类型同名,用它们能够创建相应对象或实现对象类型转化——“创建”的方法见3.1节,此处仅讨论“转化”。
>>> int(3.14)
3
>>> int(-3.14)
-3
>>> int(3.56)
3
>>> int(-3.56)
-3
从上述操作结果不难总结出如下结论:
int()
可以将浮点数转化为整数;int()
只是截取整数部分,不是“向下取整”,也不是“四舍五入”。
看来这个函数不复杂,但“麻雀虽小五脏俱全”,解剖它就能够对所有内置函数有基本了解。请继续按照下述方式输入代码:
代码语言:javascript复制>>> help(int)
这里所用的 help()
也是一个内置函数,可以在表3-3-1中找到。其参数是 int
。注意,int
后面没有 ()
,表示的是函数 int()
对象(关于“函数是对象”的话题,请参阅第7章7.3节)。
然后敲回车键,会呈现如图3-3-2所示的内容(图中是部分内容截取),按向下键或滚动鼠标,可以查看没有显示的部分。
图3-3-2 int() 的帮助文档
如果读者是如同上述演示那样,在终端或 CMD 窗口进入了交互模式,并用 help(int)
打开了图3-3-2所示的帮助文档,阅读完毕可以按键盘上的 q
键(英文状态下,且不区分大小写)返回到交互模式(显示 >>>
的状态)。
打开图3-3-2所示的帮助文档同时,在图3-3-1对应的 Python 官方文档的内置函数列表中,找到 int()
函数,点击该超链接,即打开网址 https://docs.python.org/3/library/functions.html#int ,可以看到如图3-3-3所示(部分截图)的内容。
图3-3-3 int() 的官方文档
比较两段文档,会发现其所言之意相同,都是对该 int()
的含义和用法的有关解释说明。区别在于图3-3-2所示的内容,已经随着本地 Python 开发环境的配置安装到了本地(如第1章1.7.2节中的图1-7-10所示文档),可以随时查看,通常称为“帮助文档”——可以用帮助函数 help()
查看。图3-3-3所示的文档,是发布在官方网站,可以随着版本的更新随时迭代,通常称之为“官方文档”。两者本质相同。
以图3-3-2所示的帮助文档为例,解释说明其部分内容:
int([x]) -> integer
:int([x])
表示函数int()
的调用方法,其中参数为[x]
,用[ ]
符号将x
包裹,表示该参数可以省略,即int()
(参阅3.1.1节有关操作);-> integer
表示此函数返回值是整数。int(x, base=10) -> integer
:这是此函数的另外一种调用方式,其中参数x
不能省略(不再用[ ]
符号包裹)。在x
后面跟着英文的逗号,之后是此函数的第二个参数base
,它同样也不能省略,并且以base=10
的形式规定了默认值。关于这种调用方法,会在3.4.1节详细介绍。
同理,可以在交互模式中输入 help(float)
查看 float()
函数的官方文档,亦或在 Python 官方文档中查看,并对照如下操作理解其含义:
>>> float(3)
3.0
此处仅仅讨论了浮点数和整数对象之间的转化,通过int()
和 float()
的文档说明,可知它们还支持对字符串的转化(参阅第4章4.2节)。
divmod()
函数 divmod()
会同时返回两个数相除所得的商和余数。在交互模式中查看其帮助文档(输入 help(divmod)
),会看到如下所示的简洁描述:
divmod(x, y, /)
Return the tuple (x//y, x%y). Invariant: div*y mod == x.
divmod()
的参数是两个实数 x
和 y
,返回的是 tuple
类型对象(关于 tuple
请参阅第4章4.4节),其中包括两部分,第一部分是 x//y
——表示商,第二部分是 x%y
——表示余数。在文档中还有 div*y mod == x
,其中 div
是商,mod
是余数,这与3.2节说明 //
和 %
运算符是完全一致,请对照阅读。用以下操作熟悉这个函数的调用方法。
>>> divmod(5, 2)
(2, 1)
>>> divmod(-5, 2)
(-3, 1)
>>> divmod(7, -9)
(-1, -2)
pow()
一般情况下,函数 pow()
的作用与运算符 **
相同,计算某个数的幂,例如:
>>> 2 ** 3
8
>>> pow(2, 3)
8
其中 pow()
的第一参数 2
是底,第二个参数 3
是指数。
如果读者查看其文档,会发现对 pow()
参数的描述方式有如下两种:
- 帮助文档中:
pow(base, exp, mod=None)
; - 官方文档中:
pow(base, exp[, mod])
。
其中的 base
和 exp
没有什么异议,重点看第三个参数:mod=None
表示此参数默认值是 None
,( None
是一个对象,表示没有定义或者没有值);[, mod]
表示此参数可以省略,当省略的时候与 mod=None
等效。
如果对参数 mod
赋值, 函数 pow()
与 **
运算符就有差别。若 mod
不为 None
,则计算 base ** exp % mod
,并返回表达式的值(mod
为非零整数,exp
大于零。建议读者通过文档理解 exp
小于零时的计算过程)。
>>> 2 ** 3 % 5
3
>>> pow(2, 3, 5)
3
通常使用 pow()
函数计算性能更好。
round()
使用 round()
函数能够实现对一个实数的四舍五入——针对十进制数字而言。在交互模式中完成如下操作,并结合数学中的“四舍五入”含义理解操作结果。
>>> round(3.14, 1)
3.1
>>> round(3.56)
4
>>> round(3.56, 0)
4.0
>>> round(356, -2)
400
>>> round(356, -1)
360
>>> round(-3.56, 1)
-3.6
>>> round(-356, -1)
-360
如果读者阅读官方文档(https://docs.python.org/3/library/functions.html#round),会看到如下示例:
代码语言:javascript复制>>> round(2.675, 2)
2.67
根据数学知识,
按照四舍五入原则保留两位小数,结果应为
,然而此处返回值是 2.67
。在官方文档中明确说明:“This is not a bug”,并且给出了解释(参阅3.4.2节)。
max()
和 min()
内置函数 max()
能够选出若干个数中的最大的,例如:
>>> max(3, 3.14, 7, 28)
28
注意 manx()
的参数,每个数字之间用英文的逗号 ,
隔开。同理,min()
函数则返回一系列数字中的最小值。
>>> min(3, 3.14, 7, 28)
3
Python 内置函数仅仅是编程中可能会用到的使用频率较高的少数几个函数,本节遴选几个,向读者演示了如何了解内置函数的使用方法。仅这几个函数还远未涵盖初等数学中常用函数,所以必须有新的工具,才能彰显 Python 在计算上的优势。