内置函数
概述
编程语言中的函数是为了让程序的逻辑更加清晰,一般把程序中可以成为一个功能的部分划为一个函数以便重复使用。
- 接受0个/多个参数
- 返回0个/多个值
- 定义和内部实现
- 提高应用的模块性
- 提高代码复用率
常见的内置函数
函数帮助
内置函数和部分第三方模块的函数可以使用help(fun)的方式查看帮助
自定义函数
函数定义
函数需要注意的几个点:
- 参数列表可以为空
- 返回值可选
- 函数体必须
函数中几个要素:
- def语句
- 函数名
- 括号、括号中的参数
- 冒号
- 缩进块中编写函数体
- return语句返回值
- 函数名([参数值])调用
全局变量
return返回值可以在函数外赋值和访问
不含return返回值,则函数内的变量无法在函数外访问
加入global关键字,函数内的变量可以在函数外访问
局部函数
局部函数的几个要点:
- 局部函数放在函数体内定义
- 局部函数对外部是隐藏的
- 局部函数只能在其封闭函数内有效
局部函数内的变量也会屏蔽它所在函数内的局部变量
nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量
多值返回
- Python函数可以返回多个值
- 多值自动封装为元组
- Python 提供序列解包功能,自动接收返回值
函数递归
- 在一个函数体内调用它自身
- 包含隐式循环
函数传参
传参机制
形参和实参
形参是函数定义中括号的参数,实参是函数调用中传入的实际参数。
值传递和引用传递
- 值传递:适用于实参为不可变类型(字符串、数字、元组)
- 引用传递:适用于实参为可变类型(列表,字典)
值传递形参变化不会影响实参,引用传递形参值改变实参也会变
- 值传递
主栈区中a、b变量存储示意图
主栈区的变量作为参数值传入swap()函数后存储示意图
swap()函数中a、b交换之后的存储示意图
- 引用传递
主程序创建了字典对象后存储示意图
字典传入swap()函数后存储示意图
位置参数
- 实参和形参数量必须一致
- 实参和形参位置必须一致
关键字参数
- 使用形式参数名来确定输入的参数值
- 可与位置参数混合使用
- 位置参数必须放在关键字参数之前
默认参数
- 函数定义期间赋予参数
- 可与位置参数/关键字参数混合使用
- 默认参数必须在非默认值参数之后
可变参数
*param接受任意多个实际参数,并将其放到一个元组中
如果第一个参数就是可变的参数,则调用时候后面参数必须用关键字参数,*param可以在任意位置
**param接收任意多个以关键字参数赋值的实际参数,并将其放到一个字典中
- *和**符号同时出现时,*在前**在后
- 可变参数可以传递0个1个或者多个
- 可变参数一定在普通(位置)参数之后