《Python完全自学教程》免费在线连载3.3.1

2022-04-01 09:59:31 浏览数 (1)

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节,此处仅讨论“转化”。

代码语言:javascript复制
>>> 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]) -> integerint([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 官方文档中查看,并对照如下操作理解其含义:

代码语言:javascript复制
>>> float(3)
3.0

此处仅仅讨论了浮点数和整数对象之间的转化,通过int()float() 的文档说明,可知它们还支持对字符串的转化(参阅第4章4.2节)。

divmod()

函数 divmod() 会同时返回两个数相除所得的商和余数。在交互模式中查看其帮助文档(输入 help(divmod) ),会看到如下所示的简洁描述:

代码语言:javascript复制
divmod(x, y, /)
    Return the tuple (x//y, x%y).  Invariant: div*y   mod == x.

divmod() 的参数是两个实数 xy ,返回的是 tuple类型对象(关于 tuple 请参阅第4章4.4节),其中包括两部分,第一部分是 x//y ——表示商,第二部分是 x%y ——表示余数。在文档中还有 div*y mod == x ,其中 div 是商,mod 是余数,这与3.2节说明 //% 运算符是完全一致,请对照阅读。用以下操作熟悉这个函数的调用方法。

代码语言:javascript复制
>>> divmod(5, 2)
(2, 1)
>>> divmod(-5, 2)
(-3, 1)
>>> divmod(7, -9)
(-1, -2)

pow()

一般情况下,函数 pow() 的作用与运算符 ** 相同,计算某个数的幂,例如:

代码语言:javascript复制
>>> 2 ** 3
8
>>> pow(2, 3)
8

其中 pow() 的第一参数 2 是底,第二个参数 3 是指数。

如果读者查看其文档,会发现对 pow()参数的描述方式有如下两种:

  • 帮助文档中:pow(base, exp, mod=None)
  • 官方文档中:pow(base, exp[, mod])

其中的 baseexp 没有什么异议,重点看第三个参数:mod=None 表示此参数默认值是 None ,( None 是一个对象,表示没有定义或者没有值);[, mod] 表示此参数可以省略,当省略的时候与 mod=None 等效。

如果对参数 mod 赋值, 函数 pow()** 运算符就有差别。若 mod 不为 None ,则计算 base ** exp % mod ,并返回表达式的值(mod 为非零整数,exp大于零。建议读者通过文档理解 exp小于零时的计算过程)。

代码语言:javascript复制
>>> 2 ** 3 % 5
3
>>> pow(2, 3, 5)
3

通常使用 pow() 函数计算性能更好。

round()

使用 round() 函数能够实现对一个实数的四舍五入——针对十进制数字而言。在交互模式中完成如下操作,并结合数学中的“四舍五入”含义理解操作结果。

代码语言:javascript复制
>>> 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.675

按照四舍五入原则保留两位小数,结果应为

2.68

,然而此处返回值是 2.67 。在官方文档中明确说明:“This is not a bug”,并且给出了解释(参阅3.4.2节)。

max()min()

内置函数 max() 能够选出若干个数中的最大的,例如:

代码语言:javascript复制
>>> max(3, 3.14, 7, 28)
28

注意 manx() 的参数,每个数字之间用英文的逗号 , 隔开。同理,min() 函数则返回一系列数字中的最小值。

代码语言:javascript复制
>>> min(3, 3.14, 7, 28)
3

Python 内置函数仅仅是编程中可能会用到的使用频率较高的少数几个函数,本节遴选几个,向读者演示了如何了解内置函数的使用方法。仅这几个函数还远未涵盖初等数学中常用函数,所以必须有新的工具,才能彰显 Python 在计算上的优势。

0 人点赞