函数基础
函数是“组织好、可重复使用、实现特定功能的代码段”。
为了复用逻辑、减少重复代码、提高可维护性,我们会将可重复的逻辑封装成函数。
函数的完整格式
# 定义
def 函数名(传入参数):
函数体
return 返回值
# 使用
函数名(传入参数)
说明:
- 传入参数(形参)数量不限制
- 可以没有参数
- 也可以传入任意数量的参数
- return 可写可不写
- 若不写 return,函数执行结束后自动返回 None
- 函数必须先定义后使用
简单格式(无参函数)
定义:
def 函数名():
函数体
使用:
函数名()
示例:
def say():
print("hello world")
say()
# 输出 hello world
带参函数
用于在函数执行时接收外部传入的数据。
定义:
def 函数名(传入参数):
函数体
使用:
函数名(传入参数)
示例(形参与实参说明):
def add(x, y): # x、y 是形参
res = x + y
print(res)
add(10, 6) # 10、6 是实参
# 输出 16
带返回值的函数
return 用于把结果返回给调用者。
格式:
def 函数名(参数):
函数体
return 返回值
示例:
def add(x, y):
return x + y
print("不会执行")
res = add(10, 6)
print(res)
# 输出 16
注意:
- 函数遇到
return后立即结束 return后的代码不会执行
None 类型
如果函数没有 return,默认返回 None。
示例:
def say():
print("hello world")
mes = say()
print(mes)
print(type(mes))
输出:
hello world
None
<class 'NoneType'>
用途:
- 可作为空值占位,例如:
name = None - 在 if 判断中,None == False(布尔意义上等同 False)
- 常用于函数中“没有结果”的返回值
函数的嵌套调用
一个函数内调用另一个函数。
示例:
def fun_1():
fun_2()
print("----fun_1-----")
def fun_2():
fun_3()
print("----fun_2-----")
def fun_3():
print("----fun_3----")
fun_1()
执行顺序:
fun_1 → fun_2 → fun_3 → fun_2 → fun_1
说明:
- 函数执行是“先进后出”
- 当前函数执行完毕后会回到上次调用点继续执行
变量的作用域
作用域指变量在程序中“能使用的范围”。
在函数相关的学习中,我们主要区分:
- 局部变量(local variable)
- 全局变量(global variable)
作用范围决定变量在哪里生效、在哪里无效。
局部变量(函数内部变量)
- 定义在 函数体内部 的变量
- 仅在函数内部有效
- 函数调用结束后,局部变量会被销毁
示例:
def test():
num = 100 # 局部变量
print(num)
test() # 输出 100
print(num) # 报错:name 'num' is not defined
说明:
num只能在test()内使用- 函数执行完毕后,局部变量随函数栈帧销毁
全局变量(函数内外都能使用)
- 定义在 函数外部
- 在函数内、函数外都可以访问
示例:
num = 100
def test():
print(num)
test() # 输出 100
print(num) # 输出 100
⚠ 注意:
函数内部 默认不能修改全局变量的值,除非使用 global 关键字。
如下例子中,内部与外部的 num 是不同变量:
num = 100
def test():
num = 200 # 这是局部变量,非全局变量
print(num)
test() # 输出 200
print(num) # 输出 100(说明外部的 num 未被修改)
global 关键字
用于在函数内部声明“我要使用外部的全局变量”,并允许修改它。
示例:
num = 100
def test():
global num # 声明使用外部 num
num = 200
print(num)
test() # 输出 200
print(num) # 输出 200(外部 num 被成功修改)
说明:
- 使用
global后,函数内部可修改外部变量 - 这是改变全局变量的唯一方式
作用域总结
| 类型 | 定义位置 | 生效范围 | 生命周期 |
|---|---|---|---|
| 局部变量 | 函数内 | 仅函数内部 | 函数执行完毕即销毁 |
| 全局变量 | 函数外 | 全局有效,可被多个函数使用 | 程序运行期间始终存在 |
| global | 修改声明方式 | 允许函数修改全局变量 | 影响全局变量值 |
函数进阶
Python 提供多种灵活的函数使用方式:多返回值、各种传参方法、函数作为参数、匿名函数等。本章完整讲解这些进阶能力。
多返回值
Python 支持在一个函数中返回多个值,多个返回结果会自动被打包成元组。
调用时可以使用多个变量分别接收。
示例:
def test():
return 6, 9, 16
x, y, z = test()
print(f"第一个值为{x}, 第二个值为{y}, 第三个值为{z}")
也可以返回不同类型的数据:
def test():
return "观止", True, 16
x, y, z = test()
print(x, y, z)
位置参数
调用函数时,根据参数顺序传值,数量必须一一对应。
def user_info(name, age, gender):
print(f"您的名字是{name}, 年龄是{age}, 性别是{gender}")
user_info('TOM', 20, '男')
关键字参数
通过“键=值”形式传参,可打乱顺序使用,更加清晰。
user_info(name='TOM', age=20, gender='男')
user_info(gender='男', age=20, name='TOM')
⚠ 关键字参数必须在位置参数之后:
user_info('TOM', gender='男', age=20)
默认参数(缺省参数)
用于给参数提供默认值,调用时可以省略。
def user_info(name, age, gender='男'):
print(f"您的名字是{name}, 年龄是{age}, 性别是{gender}")
user_info('TOM', 20) # gender 使用默认值
user_info('TOM', 20, '女') # gender 覆盖默认值
注意:默认参数必须放在位置参数后面。
不定长参数
用于接收数量不确定的参数。
*不定长位置参数:args
会把传入的所有位置参数打包成一个元组。
def user_info(*args):
print(args)
user_info('TOM')
user_info('TOM', 20, '女')
输出示例:
('TOM',)
('TOM', 20, '女')
**不定长关键字参数:kwargs
接收所有 key=value 参数,打包成字典。
def user_info(**kwargs):
print(kwargs)
user_info(name='TOM', age=20)
输出:
{'name': 'TOM', 'age': 20}
总结:
| 类型 | 标识 | 接收形式 |
|---|---|---|
| 不定长位置参数 | *args | 元组 |
| 不定长关键字参数 | **kwargs | 字典 |
函数作为参数传递
函数也是一种对象,可以像变量一样被传入另一个函数中。
def add(x, y):
return x + y
def compute(func):
result = func(6, 3)
print(result)
compute(add)
输出:
9
函数名表示函数本身,函数名() 表示执行函数。
lambda 匿名函数
匿名函数无需名字,只能书写一行表达式。
格式:
lambda 参数: 表达式
示例:
compute(lambda x, y: x + y)
功能上等同于:
def add(x, y):
return x + y
compute(add)
匿名函数适用于一次性、简单逻辑的函数场景。
函数使用总结
这一部分总结了函数的基础、语法、作用域、进阶用法,帮助系统理解函数在 Python 中的完整使用方式。
作用
函数是一段可复用的代码,用于实现特定功能,提升代码复用率、可维护性和结构清晰度。
主要优点:
- 避免重复代码
- 结构化程序逻辑
- 代码简洁、易维护
- 可高效组织复杂程序
语法
Python 函数的基本定义方式如下:
def 函数名(参数):
函数体
return 返回值
函数定义形式包括:
无参函数
用于封装不需要外部数据的逻辑。
def 函数名():
函数体
简单函数(带形参)
函数内部通过形参接收外部数据。
def 函数名(参数):
函数体
带返回值函数
完成功能后,将处理结果返回。
def 函数名(参数):
函数体
return 值
return 后的代码不会执行。
变量的作用域
局部变量
- 定义在函数内部
- 仅在函数内部生效
- 函数调用结束后自动销毁
全局变量
- 定义在函数外部
- 可以在函数内部读取
global 声明
默认情况下,函数内部不能修改全局变量。
若需要修改,必须使用:
global 变量名
这样函数内部操作的就是全局变量,而非局部副本。
函数进阶使用
多返回值
Python 函数可以返回多个值:
return a, b, c
外部可以用多个变量接收:
x, y, z = 函数()
可返回不同类型的数据。
多种传参方式
位置参数
按顺序传参,数量必须一致。
关键字参数
形式为 key=value,不受顺序限制。
位置参数必须在关键字参数之前。
默认参数(缺省参数)
为参数提供默认值;调用时可省略该值。
默认参数必须放在位置参数之后。
不定长参数
用于接收不确定数量的参数。
*args:接收不定长 位置参数(元组)**kwargs:接收不定长 关键字参数(字典)
函数作为参数
函数名本质是指向代码块的引用,可以像变量一样:
- 传递给其他函数
- 作为返回值
- 存入数据结构
示例结构:
def compute(func):
func(数据)
lambda 匿名函数
一种无名称的单行函数,用于临时操作。
格式:
lambda 参数: 表达式
匿名函数用途:
- 作为一次性小函数
- 可作为参数传递,如内部逻辑简单时替代普通函数
- 适用于函数式编程场景
lambda 与普通函数等价,只是语法更简短。
整体结构总结
函数使用的本质思维导图:
- 函数用于封装逻辑、提升复用性
- 语法可包含无参、有参、返回值格式
- 作用域决定变量可用范围,global 可修改全局变量
- 进阶用法包括多返回值、多种传参方式、不定长参数等
- 函数可作为参数传递
- lambda 提供精简的匿名函数形式