Chapter 5 函数

在介绍了变量之后,我们来看看函数。函数是一段代码,它可以被多次调用。函数可以接受参数,也可以返回值。

函数的定义使用关键字 def,后面跟着函数名和圆括号 ()。圆括号中可以定义参数(parameters),多个参数之间使用逗号 , 分隔。函数体以冒号 : 开始,并且必须缩进。

def function_name(parameter1, parameter2):
    # do something
    return something

函数的定义不会被执行,只有在调用函数时才会执行函数体中的代码。调用函数很容易,只需要在函数名后面加上圆括号 () 即可。

function_name(argument1, argument2)

在函数定义时的 parameter1parameter2 是形参(formal parameters),在函数调用时被实参(actual parameters)argument1argument2 替换。具体的例子如下:

def add(a, b):
    return a + b

print(add(1, 2))

我们再来看看 return 关键字。return 用于返回函数的值,如果没有 return 语句,函数会返回 Nonereturn 语句可以出现在函数体的任何位置,一旦执行到 return 语句,函数就会返回,不会再执行后面的语句。举个例子:

def add(a, b):
    print(a + b)
    return 'Mission complete.'
    print(a + 2 * b)

print(add(1, 2))

输出结果为:

1 2
Mission complete.

可以看到,print(a + 2 * b) 没有被执行。

5.1 作用域

在函数中定义的变量只能在函数内部使用,这个变量的作用域是局部的。如果在函数外部定义了一个变量,那么这个变量的作用域是全局的,可以在函数内部使用。

a = 1

def add(b):
    return a + b

print(add(2))

输出结果为:

3

如果在函数内部定义了一个与全局变量同名的变量,那么函数内部的变量会覆盖全局变量。

a = 1

def add(a, b):
    return a + b

print(add(2, 3))

输出结果为:

5

5.2 递归

递归是一种常见的算法,它的思想是把一个问题分解成多个子问题,然后逐个解决子问题。递归函数就是在函数内部调用自身。

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)