一、啥是函数?
函数是编程中的一个重要概念,简单来说,它是一段可以反复使用的代码块。通过函数,我们可以将一段代码打包起来,在需要的时候调用,而不需要每次都重复写代码
举个例子:
假设我们每天都要写类似下面的代码:
print("欢迎光临!")
print("祝您有美好的一天!")
如果有一个地方需要再次打印这些信息,我们就得重新写一遍
使用函数后:
我们可以把这段代码封装在一个函数中,以后只需要调用函数即可:
def welcome():
print("欢迎光临!")
print("祝您有美好的一天!")
# 调用函数
welcome()
二、函数的组成部分
函数定义:使用
def
关键字定义一个函数函数名:函数的名字,用来标识函数
参数:传递给函数的信息(可以没有)
函数体:函数内部要执行的代码
返回值:函数执行完成后可以返回一个结果(可选)
三、如何定义和调用函数
3.1 定义函数
函数的基本语法如下:
def 函数名(参数1, 参数2, ...):
"""这是函数的说明文档(可选)"""
函数体
return 返回值(可选)
3.2 调用函数
在定义函数后,可以通过函数名加括号的方式调用
示例 1:定义一个简单函数
def greet():
"""打印欢迎语"""
print("你好!欢迎学习 Python!")
# 调用函数
greet()
运行结果:
你好!欢迎学习 Python!
示例 2:带参数的函数
def greet(name):
"""接收一个名字,打印欢迎语"""
print(f"你好, {name}!欢迎学习 Python!")
# 调用函数时传递参数
greet("李华")
运行结果:
你好, 李华!欢迎学习 Python!
示例 3:带返回值的函数
def add(a, b):
"""接收两个数字,返回它们的和"""
return a + b
# 调用函数
result = add(5, 3)
print(f"两个数的和是:{result}")
运行结果:
两个数的和是:8
四、函数的参数
4.1 什么是参数?
参数是我们传递给函数的输入值,用来让函数处理不同的内容
4.2 参数的类型
位置参数:按顺序传递的参数
默认参数:给参数设置默认值,如果调用时未提供该参数,就会使用默认值
可变长度参数:
*args
:接收任意数量的位置参数**kwargs
:接收任意数量的关键字参数
4.3 参数的示例
1. 位置参数
def subtract(a, b):
"""减法函数"""
return a - b
print(subtract(10, 3)) # 输出 7
print(subtract(3, 10)) # 输出 -7
2. 默认参数
def greet(name="朋友"):
print(f"你好, {name}!")
greet() # 使用默认值,输出 "你好, 朋友!"
greet("小明") # 覆盖默认值,输出 "你好, 小明!"
3. 可变长度参数
# 使用 *args 处理多个位置参数
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3, 4)) # 输出 10
# 使用 **kwargs 处理多个关键字参数
def show_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
show_info(name="小明", age=20, city="上海")
运行结果:
name: 小明
age: 20
city: 上海
五、函数的返回值
5.1 什么是返回值?
函数执行完成后,可以通过 return
把结果返回给调用者。如果函数没有 return
,它会默认返回 None
5.2 返回值示例
def multiply(a, b):
"""计算两个数的乘积"""
return a * b
result = multiply(3, 5)
print(f"结果是:{result}") # 输出 "结果是:15"
5.3 返回多个值
def divide_and_remainder(a, b):
"""返回商和余数"""
return a // b, a % b
quotient, remainder = divide_and_remainder(10, 3)
print(f"商:{quotient}, 余数:{remainder}")
运行结果:
商:3, 余数:1
六、匿名函数(Lambda)
匿名函数是一种简洁的定义函数方式,常用于临时、简单的函数场景
6.1 Lambda 语法
lambda 参数1, 参数2, ...: 表达式
6.2 示例
# 普通函数
def square(x):
return x ** 2
# 等价的 Lambda 表达式
square = lambda x: x ** 2
print(square(5)) # 输出 25
七、函数的嵌套与闭包
7.1 函数嵌套
def outer_function():
def inner_function():
print("这是内部函数")
inner_function()
outer_function()
7.2 闭包
闭包是内部函数记住外部函数的变量,即使外部函数执行结束,内部函数依然可以使用这些变量
def outer(x):
def inner(y):
return x + y
return inner
closure = outer(10)
print(closure(5)) # 输出 15
八、装饰器
装饰器是函数的一种高级用法,用于在不改变函数代码的前提下增强函数功能
8.1 示例
def decorator(func):
def wrapper():
print("开始执行...")
func()
print("执行结束...")
return wrapper
@decorator
def say_hello():
print("你好!")
say_hello()
运行结果:
开始执行...
你好!
执行结束...