【Python】04.Python 的函数

一、函数的概念

函数 是一段可以被重复使用的代码片段

二、函数的语法格式

2.1 函数的创建

def 函数名(形参列表):
    函数体
    return 返回值

2.2 函数的调用

函数名(实参列表)           #不考虑返回值
返回值 = 函数名(实参列表)   #考虑返回值

函数定义并不会执行函数体内容, 必须要调用才会执行. 调用几次就会执行几次
函数必须先定义, 再使用

三、函数的参数

在函数定义的时候, 可以在 ( ) 中指定 “形式参数” ,然后在调用的时候,由调用者把 “实际参数” 传递进去,这样就可以做到一份函数,针对不同的数据进行计算处理

  • 一个函数可以有一个形参, 也可以有多个形参, 也可以没有形参
  • 一个函数的形参有几个, 那么传递实参的时候也得传几个. 保证个数要匹配
  • 和 C++ / Java 不同, Python 是动态类型的编程语言, 函数的形参不必指定参数类型. 换句话说, 一个函数可以支持多种不同类型的参数

四、函数的返回值

函数的参数可以视为是函数的 “输入”, 则函数的返回值, 就可以视为是函数的 “输出”

  • 一个函数中可以有多个 return 语句,执行到 return 语句, 函数就会立即执行结束, 回到调用位置
  • 一个函数是可以一次返回多个返回值的。使用 , 来分割多个返回值
  • 如果只想关注其中的部分返回值, 可以使用 _ 来忽略不想要的返回值

五、变量的作用域

  1. 变量只能在所在的函数内部生效
  2. 在不同的作用域中, 允许存在同名的变量
    • 在函数内部的变量, 也称为 “局部变量”
    • 不在任何函数内部的变量, 也称为 “全局变量”
  3. 如果函数内部尝试访问的变量在局部不存在, 就会尝试去全局作用域中查找
  4. 如果是想在函数内部, 修改全局变量的值, 需要使用 global 关键字声明
  5. if / while / for 等语句块不会影响到变量作用域

六、函数的执行过程

  • 调用函数才会执行函数体代码. 不调用则不会执行
  • 函数体执行结束(或者遇到 return 语句), 则回到函数调用位置, 继续往下执行

七、嵌套调用与链式访问

函数内部还可以调用其他的函数, 这个动作称为 “嵌套调用”。一个函数里面可以嵌套调用任意多个函数

把一个函数的返回值, 作为另一个函数的参数, 这种操作称为 链式访问

八、函数递归

递归是 嵌套调用 中的一种特殊情况, 即一个函数嵌套调用自己

# 计算斐波那契数列
def factor(n):
    if n == 1:
        return 1
    return n * factor(n - 1)


result = factor(5)
print(result)

注意: 递归代码务必要保证

  • 存在递归结束条件. 比如 if n == 1 就是结束条件. 当 n 为 1 的时候, 递归就结束了.
  • 每次递归的时候, 要保证函数的实参是逐渐逼近结束条件的.

如果上述条件不能满足, 就会出现 “无限递归” . 这是一种典型的代码错误

九、参数默认值

Python 中的函数,可以给形参指定默认值。带有默认值的参数,可以在调用的时候不传参

def add(x, y, debug=False):
    if debug:
        print(f'调试信息: x={x}, y={y}')
    return x + y


print(add(10, 20))
print(add(10, 20, True))

此处 debug=False 即为参数默认值. 当我们不指定第三个参数的时候, 默认 debug 的取值即为 False

十、关键字参数

在调用函数的时候,需要给函数指定实参,一般默认情况下是按照形参的顺序,来依次传递实参的。但是我们也可以通过关键字参数,来调整这里的传参顺序,显式指定当前实参传递给哪个形参

def test(x, y):
    print(f'x = {x}')
    print(f'y = {y}')
test(x=10, y=20)
test(y=100, x=200)

形如上述 test(x=10, y=20) 这样的操作, 即为 关键字参数

你可能感兴趣的:(Python,python,笔记,开发语言)