目录
1. 函数目的
函数是Python编程中的基本构建块,它们的主要目的是:
-
代码重用:避免重复编写相同的代码
-
模块化:将复杂问题分解为更小、更易管理的部分
-
抽象:隐藏实现细节,只暴露必要的接口
-
组织代码:使代码更清晰、更易于维护
# 没有函数的情况
print("欢迎,张三!")
print("今天是2023年10月15日")
print("欢迎,李四!")
print("今天是2023年10月15日")
# 使用函数改进
def greet(name):
print(f"欢迎,{name}!")
print("今天是2023年10月15日")
greet("张三")
greet("李四")
2. 函数定义
在Python中,使用def
关键字定义函数:
def function_name(parameters):
"""可选的文档字符串"""
# 函数体
# 可以包含return语句
return value
实例:
def calculate_area(length, width):
"""计算矩形的面积"""
area = length * width
return area
3. 函数声明
在Python中,函数声明和定义是同时完成的(即使用def
语句时既声明又定义了函数)。Python没有单独的声明步骤。
# 函数声明和定义同时完成
def say_hello():
print("Hello, World!")
4. 函数调用
定义函数后,可以通过函数名加括号来调用它:
# 定义函数
def greet(name):
print(f"Hello, {name}!")
# 调用函数
greet("Alice") # 输出: Hello, Alice!
greet("Bob") # 输出: Hello, Bob!
5. 函数形参
形参(形式参数)是函数定义时括号中声明的变量:
def add_numbers(a, b): # a和b是形参
return a + b
形参的特点:
-
只在函数内部有效
-
在函数被调用时接收实参的值
-
可以有默认值(称为默认参数)
6. 函数实参
实参(实际参数)是调用函数时传递给函数的值:
result = add_numbers(5, 3) # 5和3是实参
print(result) # 输出: 8
传递实参的方式:
位置参数:按位置顺序传递
def describe_pet(animal, name):
print(f"I have a {animal} named {name}.")
describe_pet("dog", "Buddy")
关键字参数:按参数名传递
describe_pet(name="Buddy", animal="dog")
混合使用:先位置参数,后关键字参数
describe_pet("dog", name="Buddy")
7. 函数返回值
使用return
语句从函数返回一个值:
def square(number):
return number * number
result = square(4)
print(result) # 输出: 16
特点:
-
可以返回任意类型的值
-
可以返回多个值(实际上是返回一个元组)
-
如果没有return语句,函数返回None
多值返回示例:
def get_user_info():
name = "Alice"
age = 25
return name, age # 返回一个元组
user_name, user_age = get_user_info()
8. 函数的参数类型
Python函数支持多种参数类型:
必需参数:调用时必须提供的参数
def greet(name): # name是必需参数
print(f"Hello, {name}!")
默认参数:有默认值的参数
def greet(name, message="Hello"): # message有默认值
print(f"{message}, {name}!")
greet("Alice") # 使用默认message
greet("Bob", "Hi") # 覆盖默认值
可变长度参数
*args
:接收任意数量的位置参数,作为元组
def sum_numbers(*args):
total = 0
for num in args:
total += num
return total
print(sum_numbers(1, 2, 3)) # 输出: 6
**kwargs
:接收任意数量的关键字参数,作为字典
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=25, city="New York")
仅关键字参数:
def create_user(name, *, age, city):
print(f"{name}, {age}, {city}")
create_user("Alice", age=25, city="NY") # 正确
create_user("Bob", 30, "LA") # 错误,age和city必须作为关键字参数
9. 匿名函数
匿名函数(lambda函数)是没有名称的小型函数,使用lambda
关键字创建:
# 语法
lambda arguments: expression
示例:
# 普通函数
def square(x):
return x * x
# 等效的lambda函数
square = lambda x: x * x
print(square(5)) # 输出: 25
常见用途:
作为参数传递给高阶函数
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers))
print(squared) # 输出: [1, 4, 9, 16]
简单的条件判断
max_value = lambda a, b: a if a > b else b
print(max_value(5, 3)) # 输出: 5
10. 闭包
闭包是由函数及其相关引用环境组合而成的实体:
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
closure = outer_function(10)
print(closure(5)) # 输出: 15
print(closure(20)) # 输出: 30
闭包的特点:
-
内部函数可以访问外部函数的变量
-
即使外部函数已经执行完毕,内部函数仍然可以记住这些变量
-
常用于装饰器和函数工厂
实用示例:
def power_factory(exponent):
def power(base):
return base ** exponent
return power
square = power_factory(2)
cube = power_factory(3)
print(square(4)) # 输出: 16
print(cube(3)) # 输出: 27
11. 装饰器
装饰器是修改其他函数功能的函数,它们提供了一种简洁的语法来使用高阶函数:
基本装饰器:
def my_decorator(func):
def wrapper():
print("函数执行前")
func()
print("函数执行后")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
# 输出:
# 函数执行前
# Hello!
# 函数执行后
带参数的装饰器:
def repeat(num_times):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(num_times):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
@repeat(num_times=3)
def greet(name):
print(f"Hello {name}")
greet("Alice")
# 输出:
# Hello Alice
# Hello Alice
# Hello Alice
12. 内置函数
Python提供了许多有用的内置函数,以下是一些常用的:
输入输出:
print("Hello, World!") # 输出到控制台
name = input("请输入你的名字: ") # 从控制台获取输入
类型转换:
int("123") # 字符串转整数 → 123
float("3.14") # 字符串转浮点数 → 3.14
str(123) # 整数转字符串 → "123"
list((1,2,3)) # 元组转列表 → [1, 2, 3]
数学运算:
abs(-5) # 绝对值 → 5
round(3.14159, 2) # 四舍五入 → 3.14
pow(2, 3) # 幂运算 → 8 (等价于 2**3)
序列操作:
len([1, 2, 3]) # 获取长度 → 3
max([1, 2, 3]) # 最大值 → 3
min([1, 2, 3]) # 最小值 → 1
sum([1, 2, 3]) # 求和 → 6
sorted([3, 1, 2]) # 排序 → [1, 2, 3]
reversed([1, 2, 3]) # 反转 → [3, 2, 1] (返回迭代器)
其他实用函数:
help(print) # 查看帮助文档
dir([]) # 查看对象的所有属性和方法
globals() # 返回全局符号表
locals() # 返回局部符号表
掌握这些函数基础概念是成为Python程序员的重要一步。函数不仅能帮助你组织代码,还能让你的程序更加模块化、可重用和易于维护。