跟着我学Python基础篇:05.函数

往期文章

跟着我学Python基础篇:01.初露端倪
跟着我学Python基础篇:02.数字与字符串编程
跟着我学Python基础篇:03.选择结构
跟着我学Python基础篇:04.循环


目录

  • 往期文章
  • 1. 函数如同黑盒子
  • 2. 实现和测试函数
    • 2.1 实现函数
    • 2.2 测试函数
    • 2.3 包含函数的程序
    • 2.4 注释风格
  • 3. 参数的传递
  • 4. 返回值
  • 5. 没有返回值的函数
  • 6. 变量作用域
  • 7. 递归函数

1. 函数如同黑盒子

函数是有名字的一系列指令。你输入参数,函数会得到一个对应的结果。而中间得到这个结果的细节,就好像被封印在了函数内部这个黑盒子中。

2. 实现和测试函数

2.1 实现函数

编写函数时,我们需要:

  1. 给函数选一个名字
  2. 给每个参数定义变量

把这些信息和保留字def放到一起,组成函数定义的第一行:

def name(parameter)

这叫作函数的头部,接下来,说明函数体,函数体包含函数被调用时要执行的指令,一个函数是一个复合语句,要求函数体内部的语句缩进到同样的层次。
我们举一个计算立方体体积的函数的例子:

def cubeVolume(sideLength):
    volume=sideLength**3
    return volume

2.2 测试函数

我们已经知道如何编写一个函数了,但是,当我们需要调用这个函数的时候,我们就需要考虑地更多。
为了测试这个函数,我们的程序应该包括:

  1. 函数的定义
  2. 调用函数和输出结果的语句
def cubeVolume(sideLength):
    volume=sideLength**3
    return volume

result1=cubeVolume(2)
result2=cubeVolume(10)

print(result1)
print(result2)

跟着我学Python基础篇:05.函数_第1张图片
调用函数时使用不同的参数,函数会返回不同的值。

2.3 包含函数的程序

编写一个或多个函数的程序时,你需要注意函数的定义和调用语句的顺序。
读取源代码时,Python解释器依次读取每个函数定义和每个语句。函数定义中的语句在函数被调用之前不会被执行。另一方面,函数定义之外的语句再遇到时会立刻执行,所以,在调用之前定义每一个函数是非常重要的。
在定义和使用函数时,把所有的语句都放在函数中并且指定一个函数作为入口点,这是一个非常好的编程习惯。

2.4 注释风格

我们提供一种风格的注释供读者参考:

## Computes the volume of a cube
# @param sideLength the length of a side of the cube
# @return the volume of the cube
#

注释的每一行以“#”开始,使用两个“#”开始的第一行描述函数的目的,每个“@param字句描述一个形参变量”,“@return”字句描述返回值。
这种风格的注释是从Java语言借鉴而来,得到了大量文档工具的支持。

3. 参数的传递

在这一部分,我们来近距离了解一下何为参数。当一个函数被调用时,用来接收函数实参的变量被创建,这些变量称为形参变量,也有的叫形式参数,调用函数时提供给函数的这些值是本次调用的实参,或者叫做实际参数。每个形参变量使用对应的实参进行初始化。
这提示我们:
尽量不要在函数体中修改形参变量,这可能会造成意想不到的错误。
在Python中,一个函数永远不能修改作为实参传递过来的变量的内容。

4. 返回值

我们使用return来指定函数的结果,处理return语句时,函数立刻退出。一些程序员不喜欢一个函数中使用多个return,可以把函数的结果保留在一个变量中,然后最后返回。

5. 没有返回值的函数

有时候,我们会需要执行一系列不产生值的指令,如果那个指令会出现多次,我们会考虑把它封装为一个函数。
实际上,这种函数返回一个特殊值,None,但是我们不能对这个值做任何事情。

6. 变量作用域

一个变量的作用域是指能够访问他的代码范围,例如,函数形参变量的作用域是整个函数。
在函数中定义的变量叫做局部变量,如果局部变量是在一个代码块中定义的,那么它从定义的位置开始到所在函数结束的代码中都是可以访问的。
python也支持全局变量:函数之外定义的变量。
全局变量对于之后定义的所有函数都是可见的,任何想修改全局变量的函数都必须包含一个global声明。

7. 递归函数

递归计算通过使用同样对问题但输入更简单的解决方案来解决问题,为了让递归能够结束,必须有最简单的输出特例。
让我们用递归来实现打印一个三角形:

def main():
    printTriangle(4)

def printTriangle(sideLength):
    if sideLength<1:return
    printTriangle(sideLength-1)
    print("[]"*sideLength)

main()

跟着我学Python基础篇:05.函数_第2张图片

你可能感兴趣的:(Python,python)