函数#

我们在过去的课程中使用过函数。函数有名称和参数。有些函数返回结果,有些则不返回。我们通常使用 result = name(parameters) 的形式来调用它们。

另请参阅

让我们看一些函数的例子,比如 print(text)pow(x, y)。print函数接受一个参数(或多个参数)并且不返回任何内容:

result = print('Hello world')
Hello world
result

pow 函数有两个参数并返回一个结果:

result = pow(2, 3)
result
8

自定义函数#

你可以使用 def 语句定义自己的函数。在def语句之后,你应该指定函数的名称,并在括号中指定其参数。然后是一个冒号 : ,所有缩进的后续代码行都是这个函数的一部分。最后的 return 语句将结果发送回函数被调用的地方。

def sum_numbers(a, b):
    
    result = a + b
    
    return result

然后你可以根据需要多次调用你的函数

sum_numbers(3, 4)
7
sum_numbers(5, 6)
11

有时,你可能想将函数的结果保存在一个变量中。

c = sum_numbers(4, 5)
print(c)
9

使用函数简化代码#

假设你有一个复杂的算法,可以判断一个数是奇数还是偶数。让我们把这个算法放在一个函数中,稍后再调用它。对于我们的算法,我们将使用模运算符 %

def print_odd_or_even(number):
    if number % 2 == 0:
        print(number, "is even")
    else:
        print(number, "is odd")
print_odd_or_even(3)
3 is odd
print_odd_or_even(4)
4 is even
print_odd_or_even(10)
10 is even

因此,我们不需要反复编写相同的 if-else 块,只需调用我们自定义的 print_odd_or_even 函数即可。

函数文档#

你可以在函数的所谓文档字符串中记录函数的功能。文档字符串紧跟在函数头之后,看起来像这样:

def square(number):
    '''
    将一个数平方,即将其与自身相乘,并返回结果。
    '''

    return number * number

之后你可以这样阅读函数的文档:

print(square.__doc__)
    Squares a number by multiplying it with itself  and returns its result.
    

如果你想在笔记本中并排显示文档字符串,也可以尝试这样:

square?
Signature: square(number)
Docstring: Squares a number by multiplying it with itself  and returns its result.
File:      /var/folders/p1/6svzckgd1y5906pfgm71fvmr0000gn/T/ipykernel_11914/1507435947.py
Type:      function

顺便说一下,你可以对任何函数这样做:

import math
print(math.sqrt.__doc__)
Return the square root of x.
print(math.exp.__doc__)
Return e raised to the power of x.

练习#

编写一个函数,接受两个参数:number_of_points_in_examnumber_of_total_points_in_exam,并返回一个1到5的成绩。获得超过95%分数的学生得1分,超过80%得2分,超过60%得3分,超过50%得4分。得分低于50%的学生得5分并需要重考。然后,为三名学生调用这个函数,他们在一次总分为30分的考试中分别得到15分、25分和29分。