函数是一段可重用的代码块,它接受输入(参数),执行特定的操作,并返回结果。函数的主要作用是:
def function_name(parameters):
"""文档字符串:描述函数的功能"""
# 函数体:具体的代码逻辑
return result # 返回值(可选)
def
:定义函数的关键字function_name
:函数名,遵循Python命名规范parameters
:参数列表,可以为空文档字符串
:描述函数功能的字符串函数体
:具体的代码逻辑return
:返回语句,可选# 定义一个简单的问候函数
def greet():
"""打印问候语"""
print("Hello, World!")
# 调用函数
greet() # 输出: Hello, World!
# 带参数的函数
def greet_person(name):
"""向指定的人打招呼"""
print(f"Hello, {name}!")
# 调用函数
greet_person("Alice") # 输出: Hello, Alice!
greet_person("Bob") # 输出: Hello, Bob!
# 计算两个数的和
def add_numbers(a, b):
"""计算两个数的和"""
result = a + b
return result
# 调用函数并获取返回值
sum_result = add_numbers(5, 3)
print(sum_result) # 输出: 8
# 直接在表达式中使用函数
print(add_numbers(10, 20)) # 输出: 30
def describe_person(name, age, city):
"""描述一个人的基本信息"""
print(f"{name} is {age} years old and lives in {city}.")
# 按位置传递参数
describe_person("Alice", 25, "Beijing")
# 输出: Alice is 25 years old and lives in Beijing.
# 使用关键字参数,顺序可以改变
describe_person(age=30, name="Bob", city="Shanghai")
# 输出: Bob is 30 years old and lives in Shanghai.
def greet_with_title(name, title="Mr."):
"""带默认参数的问候函数"""
print(f"Hello, {title} {name}!")
# 使用默认参数
greet_with_title("Smith") # 输出: Hello, Mr. Smith!
# 覆盖默认参数
greet_with_title("Johnson", "Dr.") # 输出: Hello, Dr. Johnson!
# *args:接收任意数量的位置参数
def sum_all(*args):
"""计算所有参数的和"""
total = 0
for num in args:
total += num
return total
print(sum_all(1, 2, 3, 4, 5)) # 输出: 15
print(sum_all(10, 20)) # 输出: 30
# **kwargs:接收任意数量的关键字参数
def print_info(**kwargs):
"""打印所有关键字参数"""
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=25, city="Beijing")
# 输出:
# name: Alice
# age: 25
# city: Beijing
def get_square(x):
"""返回一个数的平方"""
return x ** 2
result = get_square(5)
print(result) # 输出: 25
def get_min_max(numbers):
"""返回列表中的最小值和最大值"""
if not numbers:
return None, None
return min(numbers), max(numbers)
min_val, max_val = get_min_max([3, 1, 4, 1, 5, 9, 2, 6])
print(f"最小值: {min_val}, 最大值: {max_val}")
# 输出: 最小值: 1, 最大值: 9
def check_number(num):
"""检查数字的性质"""
if num > 0:
return "正数"
elif num < 0:
return "负数"
else:
return "零"
print(check_number(5)) # 输出: 正数
print(check_number(-3)) # 输出: 负数
print(check_number(0)) # 输出: 零
# 全局变量
global_var = "我是全局变量"
def test_scope():
# 局部变量
local_var = "我是局部变量"
print(f"函数内访问全局变量: {global_var}")
print(f"函数内访问局部变量: {local_var}")
test_scope()
print(f"函数外访问全局变量: {global_var}")
# print(local_var) # 错误!局部变量在函数外不可访问
counter = 0
def increment_counter():
global counter # 声明使用全局变量
counter += 1
print(f"计数器: {counter}")
increment_counter() # 输出: 计数器: 1
increment_counter() # 输出: 计数器: 2
increment_counter() # 输出: 计数器: 3
# 普通函数
def square(x):
return x ** 2
# 等价的lambda函数
square_lambda = lambda x: x ** 2
print(square(5)) # 输出: 25
print(square_lambda(5)) # 输出: 25
# lambda函数常用于排序
names = ["Alice", "Bob", "Charlie", "David"]
sorted_names = sorted(names, key=lambda name: len(name))
print(sorted_names) # 输出: ['Bob', 'Alice', 'David', 'Charlie']
def apply_operation(func, x, y):
"""应用指定的操作函数"""
return func(x, y)
def add(a, b):
return a + b
def multiply(a, b):
return a * b
# 传递函数作为参数
result1 = apply_operation(add, 5, 3)
result2 = apply_operation(multiply, 5, 3)
print(result1) # 输出: 8
print(result2) # 输出: 15
def outer_function(x):
"""外部函数"""
def inner_function(y):
"""内部函数"""
return x + y # 可以访问外部函数的变量
return inner_function
# 创建闭包
add_five = outer_function(5)
result = add_five(3)
print(result) # 输出: 8
def calculator(operation, a, b):
"""简单的计算器函数"""
if operation == "add":
return a + b
elif operation == "subtract":
return a - b
elif operation == "multiply":
return a * b
elif operation == "divide":
if b != 0:
return a / b
else:
return "错误:除数不能为零"
else:
return "错误:不支持的操作"
# 测试计算器
print(calculator("add", 10, 5)) # 输出: 15
print(calculator("multiply", 4, 6)) # 输出: 24
print(calculator("divide", 15, 3)) # 输出: 5.0
def validate_email(email):
"""验证邮箱格式"""
if "@" in email and "." in email:
return True
return False
def validate_age(age):
"""验证年龄范围"""
try:
age_num = int(age)
if 0 <= age_num <= 150:
return True
return False
except ValueError:
return False
# 测试验证函数
emails = ["test@example.com", "invalid-email", "user@domain"]
for email in emails:
print(f"{email}: {'有效' if validate_email(email) else '无效'}")
ages = ["25", "200", "abc", "-5"]
for age in ages:
print(f"年龄 {age}: {'有效' if validate_age(age) else '无效'}")
def filter_even_numbers(numbers):
"""过滤出偶数"""
return [num for num in numbers if num % 2 == 0]
def find_max_min(numbers):
"""找到最大值和最小值"""
if not numbers:
return None, None
return max(numbers), min(numbers)
def calculate_average(numbers):
"""计算平均值"""
if not numbers:
return 0
return sum(numbers) / len(numbers)
# 测试列表处理函数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_nums = filter_even_numbers(numbers)
max_val, min_val = find_max_min(numbers)
avg_val = calculate_average(numbers)
print(f"原列表: {numbers}")
print(f"偶数: {even_nums}")
print(f"最大值: {max_val}, 最小值: {min_val}")
print(f"平均值: {avg_val}")
def calculate_area(length, width):
"""
计算矩形的面积
参数:
length (float): 矩形的长度
width (float): 矩形的宽度
返回:
float: 矩形的面积
示例:
>>> calculate_area(5.0, 3.0)
15.0
"""
return length * width
def safe_divide(a, b):
"""安全除法函数"""
try:
return a / b
except ZeroDivisionError:
print("错误:除数不能为零")
return None
except TypeError:
print("错误:参数类型不正确")
return None
# 测试错误处理
print(safe_divide(10, 2)) # 输出: 5.0
print(safe_divide(10, 0)) # 输出: 错误:除数不能为零
print(safe_divide("10", 2)) # 输出: 错误:参数类型不正确