本章介绍如何将语句组合成函数,这让你能够告诉计算机如何完成任务,且只需说一次,无需反复向计算机传达详细指令。本章详细介绍参数和作用域,还将讨论递归是什么及其在程序中的用途。
6.1 懒惰是一种美德
前面编写的程序都很小,但如果要编写大型程序,你很快就会遇到麻烦。想想看,如果你在一个地方编写了一些代码,但需要在另一个地方再次使用,该如何办呢?例如,假设你编写了一段代码,它计算一些斐波那契数(一种数列,其中每个数都是前两个数的和)。
fibs = [0, 1]
for i in range(8):
fibs.append(fibs[-2] + fibs[-1])
运行上述代码后, fibs将包含前10个斐波那契数。
>>> fibs
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
如果你想一次计算前10个斐波那契数,上述代码刚好能满足需求。你甚至可以修改前述for循环,使其处理动态的范围,即让用户指定最终要得到的序列的长度。
fibs = [0, 1]
num = int(input('How many Fibonacci numbers do you want? '))
for i in range(num-2):
fibs.append(fibs[-2] + fibs[-1])
print(fibs)
如果要使用这些数字做其他事情,该如何办呢?当然,你可以在需要时再次编写这个循环,但如果已编写好的代码更复杂呢(如下载一组网页并计算所有单词的使用频率)?在这种情况下,你还愿意多次编写这些代码吗(每当需要时就编写一次)?不,真正的程序员是不会这样做的。
真正的程序员很懒。这里说的懒不是贬义词,而是说不做无谓的工作。
那么真正的程序员会如何做呢?让程序更抽象。要让前面的程序更抽象,可以像下面这样做:
num = input('How many numbers do you want? ')
print(fibs(num))
在这里,只具体地编写了这个程序独特的部分(读取数字并打印结果)。实际上,斐波那契数的计算是以抽象的方式完成的:你只是让计算机这样做,而没有具体地告诉它如何做。你创建了一个名为fibs的函数,并在需要计算斐波那契数时调用它。如果需要在多个地方计算斐波那契数,这样做可节省很多精力。
领取专属 10元无门槛券
私享最新 技术干货