函数定义

  1. 函数是一段具有特定功能的、可重用的语句组
  2. 函数是一种功能的抽象,一般函数表达特定功能
  3. 两个作用:降低编程难度 和 代码复用
  4. 函数定义时,所指定的参数是一种占位符
  5. 函数定义后,如果不经过调用,不会被执行
  6. 函数定义时,参数是输入,函数是处理,结果是输出

格式

  1. def <函数名> (<参数(0个或多个)>):
  2. <函数体>
  3. return <返回值>

示例:计算阶乘 n!
4- 函数与代码复用 - 图1

函数的调用

  • 调用时要给出实际参数
  • 实际参数替换定义中的参数
  • 函数调用后得到返回值

调用过程:
image.png

参数传递

  1. 函数可以有参数,也可以没有,但必须保留括号
  2. 函数定义时可以为某些参数指定默认值,构成可选参数

语法:

  1. def <函数名>(<非可选参数>,<可选参数>):
  2. <函数体>
  3. return <返回值>

image.png

  1. 函数定义时可以设计可变数量参数,即 不确定参数总数量

    1. def <函数名>(<参数>,*b):
    2. <函数体>
    3. return <返回值>

    4- 函数与代码复用 - 图4

  2. 传递参数的两种方式

调用函数时,可以按照 位置 或 名称 传递参数
4- 函数与代码复用 - 图5

  1. 函数的返回值

函数可以返回0个或多个结果

  • return保留字用来传递返回值
  • 函数可以有返回值,也可以没有,可以有return,也可以没有
  • return可以传递0个返回值,也可以传递任意多个返回值

    image.png

局部变量和全局变量

规则

  • 局部变量是函数内部的占位符,与全局变量可能重名但不同
  • 函数运算结束后,局部变量被释放
    1. n,s = 10,100 #定义全局变量 n , s
    2. def fact(n): #函数内的n、s是局部变量
    3. s = 1
    4. for i in range(1,n+1):
    5. s *= i
    6. return s
    7. print(fact(n),s) #函数外的n、s是全局变量
    1. ![](https://cdn.nlark.com/yuque/0/2021/jpeg/20358086/1621706722765-b03e49b8-b405-434d-92f1-55ada196c429.jpeg#align=left&display=inline&height=198&margin=%5Bobject%20Object%5D&originHeight=264&originWidth=700&size=0&status=done&style=none&width=524)
  • 可以使用 global 保留字在函数内部使用全局变量

    1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/20358086/1621706839854-3987d836-0d4c-4e73-8d1c-6bfc925d9131.png#align=left&display=inline&height=192&margin=%5Bobject%20Object%5D&name=image.png&originHeight=259&originWidth=720&size=41995&status=done&style=none&width=535)
  • 局部变量为组合数据类型且未创建,等同于全局变量

4- 函数与代码复用 - 图7

函数递归

递归实现:函数 + 分支语句

  • 递归本身是一个函数,需要函数定义方式描述
  • 函数内部,采用分支语句输入参数进行判断
  • 基例和链条,分别编写对应代码
  • 递归的调用过程

4- 函数与代码复用 - 图8