一、函数的核心概念
函数的本质是 “封装逻辑,按需调用”,核心要素包括:
- 函数名:唯一标识,遵循变量命名规则(小写 + 下划线);
- 参数:调用时传入的 “输入数据”;
- 函数体:实现功能的代码块(需缩进);
- 返回值:函数执行后输出的结果(可选)。
二、函数的定义
1. 基本语法
python
运行
def 函数名(参数列表):
"""函数文档字符串(可选,说明功能)"""
函数体(实现逻辑)
return 返回值(可选)
def:定义函数的关键字;- 参数列表:多个参数用逗号分隔,可空;
- 文档字符串:用
""" """包裹,可通过函数名.__doc__或help(函数名)查看; return:结束函数并返回结果,无return则默认返回None。
2. 无参数无返回值
最简单的函数,仅执行固定逻辑:
python
运行
# 定义函数
def print_hello():
"""打印问候语"""
print("Hello, Python!")
# 调用函数(必须调用才会执行)
print_hello() # 输出:Hello, Python!
3. 有参数有返回值
带参数接收输入,通过return返回结果:
python
运行
def add(a, b):
"""计算两个数的和并返回"""
result = a + b
return result # 返回计算结果
# 调用函数,接收返回值
sum_result = add(3, 5)
print(sum_result) # 输出:8
三、函数的调用
调用函数的语法:函数名(传入参数),核心是参数匹配,常见调用方式如下:
1. 位置参数(最常用)
按参数定义的顺序传入值,一一对应:
python
运行
def multiply(x, y):
return x * y
# 位置参数调用:x=4,y=6
print(multiply(4, 6)) # 输出:24
2. 关键字参数
通过参数名=值传入,顺序可任意,适合参数多的场景:
python
运行
# 关键字参数调用:y=6,x=4(顺序颠倒不影响)
print(multiply(y=6, x=4)) # 输出:24
3. 默认参数
定义函数时给参数指定默认值,调用时可省略该参数:
python
运行
def greet(name, msg="早上好"):
"""带默认参数的问候函数"""
print(f"{name},{msg}!")
# 省略默认参数(使用msg="早上好")
greet("小明") # 输出:小明,早上好!
# 覆盖默认参数
greet("小红", "下午好") # 输出:小红,下午好!
⚠️ 注意:默认参数必须放在非默认参数后面(如def greet(msg="早上好", name)会报错)。
4. 可变长度参数
处理不确定数量的参数,分两种:
*args:接收任意数量的位置参数,打包成元组;**kwargs:接收任意数量的关键字参数,打包成字典。
python
运行
# *args示例:计算任意个数的和
def sum_all(*args):
total = 0
for num in args:
total += num
return total
print(sum_all(1, 2, 3)) # 输出:6
print(sum_all(5, 10, 15, 20)) # 输出:50
# **kwargs示例:打印用户信息
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="小李", age=20, city="北京")
# 输出:
# name: 小李
# age: 20
# city: 北京
四、函数的高级用法
1. 函数嵌套
函数内部定义另一个函数,内层函数仅对外层函数可见:
python
运行
def outer():
print("外层函数执行")
def inner():
print("内层函数执行")
inner() # 外层函数内调用内层函数
outer()
# 输出:
# 外层函数执行
# 内层函数执行
2. 函数作为参数 / 返回值(高阶函数)
python
运行
# 函数作为参数
def add(a, b):
return a + b
def calculate(func, x, y):
return func(x, y)
print(calculate(add, 10, 20)) # 输出:30
# 函数作为返回值
def get_operation(op):
def add(a, b):
return a + b
def sub(a, b):
return a - b
if op == "+":
return add
else:
return sub
add_func = get_operation("+")
print(add_func(5, 3)) # 输出:8
3. 匿名函数(lambda)
简化简单函数的定义,语法:lambda 参数: 表达式(无return,表达式结果即返回值):
python
运行
# 等价于 def add(a, b): return a + b
add = lambda a, b: a + b
print(add(4, 5)) # 输出:9
# 结合内置函数使用(如sorted)
nums = [(1, 3), (4, 1), (2, 2)]
# 按元组第二个元素排序
sorted_nums = sorted(nums, key=lambda x: x[1])
print(sorted_nums) # 输出:[(4, 1), (2, 2), (1, 3)]
五、注意事项
-
作用域:函数内部定义的变量为局部变量,外部无法访问;全局变量需用
global声明才能在函数内修改; -
参数传递:
- 不可变类型(int/str/tuple):传值(函数内修改不影响外部);
- 可变类型(list/dict):传引用(函数内修改会影响外部);
-
函数名复用:后定义的函数会覆盖先定义的同名函数;
-
文档字符串:建议为重要函数添加,提升可读性。
总结
- 定义:用
def关键字,明确参数和返回值; - 调用:匹配参数(位置 / 关键字 / 默认 / 可变),按需接收返回值;
- 进阶:嵌套、高阶函数、lambda 可简化代码,提升灵活性。