python基础教程九 抽象一(函数初步)

1. 懒惰是种美德

前面编写的程序都很小,但如果要编写大型程序,你很快会遇到麻烦。想想看,如果你在一个地方编写了一些代码,但需要在另一个地方再次使用,该如何办?例如,假设你编写了一段代码,他计算一些斐波那契数(一种数列,其中每个数都是前俩个数的和)。

fib=[0,1]
for i in range(8):
	fib.append(fib[-2]+fib[-1])
	

运行上述代码后,fib将包含前十个斐波那契数

>>> fib
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

如果要使用这些数字做其他的事情,该如何办呢?当然,你可以在需要时再次编写这个循环,但如果已编写好的代码更复杂呢?在这种情况下,你还愿意多次编写这些代码吗(每当需要就编写一次)? 不,真正的程序员是不会这样做的,真正的程序员很懒。这里说的懒不是贬义词,而是说不做无谓的工作。
那么真正的程序员会如何做呢?让程序更抽象。要让前面的程序更抽象。例如下面

num=input('how many numbers do you want')
print(fib(num))

在这里,只具体地编写了这个程序独特的部分(读取数字并打印结果)。实际上,斐波那契数的计算是以抽象的方式完成的;你只是让计算机这样做,没有具体告诉它如何做。你创建了一个名为fibs的函数,并在需要计算斐波那契时调用它。如果需要多个地方计算斐波那契数,这样做可省很多精力。

2. 自定义函数

函数执行特定的操作并返回一个值,你可以调用它.一般而言,要判断某个对象是否可调用,可用内置函数callable.

>>> import math
>>> x=1
>>> y=math.sqrt
>>> callable(x)
False
>>> callable(y)
True
>>>

函数是结构化编程的核心。那么如何定义函数呢? 使用def(表示定义函数)

>>> def hello(name):
...     return '1'+name+'2'

运行这些代码后,将有一个hello的新函数。它返回一个字符串。
那我们编写一个返回斐波那契数列的列表函数。

def fib(num):
    s=[0,1]
    for i in range(2,num+1):
        s.append(s[-1]+s[-2])
    return s

while True:
    num=int(input())
    print(fib(num))

执行这些代码后,解释器就知道如何计算斐波那契数了,现在你不用再关心这些细节了,而只需调用fib.
在这个示例中,num和result也可用其他名字,但return语句非常重要。return语句用于从函数返回值(在前面的hello函数中,return语句的作用也是一样的)。

1. 给函数编写文档

要给函数编写文档,以确保其他人能够理解,可添加注释(以#打头的内容),还有另一种编写注释的方式,就是添加独立的字符串。在有些地方,如def语句后面,添加这样的字符串很有用。放在函数开头的字符串称为文档字符串,将作为函数的一部分存储起来。

def square(x):
    '一个平方函数'
    return x*x

print(square.__doc__)


一个平方函数

doc(注意是俩个连着的下划线)是函数的一个属性。

特殊内置函数helo也很有用。在交互式解释器中,可使用它获取有关函数的信息,其中包含函数的文档字符串。

>>> help(square)
Help on function square in module __main__:

square(x)
    一个平方函数

你可能感兴趣的:(python基础教程(第三版),python)