函数定义与调用
什么是函数?
函数是一段可重复使用的代码块,它可以接收输入(参数),执行特定的操作,并返回结果。
函数的基本语法
# 定义一个简单的函数
def greet():
print("你好,欢迎学习Python!")
# 调用函数
greet()
# 带参数的函数
def greet_person(name):
print(f"你好,{name}!")
greet_person("小明")
# 带返回值的函数
def add_numbers(a, b):
return a + b
result = add_numbers(5, 3)
print(f"5 + 3 = {result}") # 输出:5 + 3 = 8
注意:函数必须先定义后使用,否则会报错。函数名应该使用小写字母和下划线的命名方式。
参数传递
参数类型
# 位置参数
def describe_pet(animal_type, name):
print(f"我有一只{animal_type},它叫{name}")
describe_pet("猫", "咪咪")
# 关键字参数
describe_pet(name="旺财", animal_type="狗")
# 默认参数
def greet_user(name, greeting="你好"):
print(f"{greeting},{name}!")
greet_user("小明") # 使用默认问候语
greet_user("小红", "早上好") # 自定义问候语
# 可变参数 *args
def print_numbers(*numbers):
for num in numbers:
print(num)
print_numbers(1, 2, 3, 4, 5)
# 关键字可变参数 **kwargs
def print_info(**info):
for key, value in info.items():
print(f"{key}: {value}")
print_info(name="小明", age=18, city="北京")
参数传递的最佳实践
- 必选参数应该放在前面
- 默认参数应该使用不可变类型
- 可变参数应该放在最后
返回值
# 返回单个值
def square(number):
return number ** 2
result = square(4)
print(result) # 输出:16
# 返回多个值
def get_coordinates():
x = 10
y = 20
return x, y
x_pos, y_pos = get_coordinates()
print(f"坐标:({x_pos}, {y_pos})")
# 条件返回
def absolute_value(number):
if number >= 0:
return number
else:
return -number
print(absolute_value(-5)) # 输出:5
# 返回None
def do_nothing():
pass # 函数体为空时返回None
result = do_nothing()
print(result) # 输出:None
作用域
变量的作用域
Python中的变量有全局作用域和局部作用域之分,这决定了变量在哪些地方可以被访问。
# 全局变量
message = "Hello" # 全局变量
def print_message():
print(message) # 可以访问全局变量
print_message()
# 局部变量
def calculate_sum():
result = 0 # 局部变量
for i in range(10):
result += i
return result
print(calculate_sum())
# print(result) # 错误!不能访问局部变量
# 使用global关键字
counter = 0
def increment():
global counter # 声明使用全局变量
counter += 1
return counter
print(increment()) # 输出:1
print(counter) # 输出:1
注意:尽量避免使用global关键字,它会使代码难以维护。建议通过参数传递和返回值来传递数据。
练习与实践
练习1:计算器函数
创建一个简单的计算器函数,要求:
- 支持加、减、乘、除四种运算
- 包含错误处理(如除以零)
- 返回计算结果
参考代码:
def calculator(num1, num2, operator):
"""简单计算器函数"""
if operator == '+':
return num1 + num2
elif operator == '-':
return num1 - num2
elif operator == '*':
return num1 * num2
elif operator == '/':
if num2 == 0:
return "错误:除数不能为0"
return num1 / num2
else:
return "错误:不支持的运算符"
# 测试计算器
print(calculator(10, 5, '+')) # 15
print(calculator(10, 5, '-')) # 5
print(calculator(10, 5, '*')) # 50
print(calculator(10, 5, '/')) # 2.0
print(calculator(10, 0, '/')) # 错误:除数不能为0
练习2:学生成绩管理
创建一组函数来管理学生成绩:
# 学生成绩管理系统
def add_score(scores, name, score):
"""添加学生成绩"""
scores[name] = score
return f"已添加{name}的成绩:{score}"
def get_average(scores):
"""计算平均分"""
if not scores:
return 0
return sum(scores.values()) / len(scores)
def get_highest(scores):
"""获取最高分"""
if not scores:
return None
return max(scores.items(), key=lambda x: x[1])
# 使用示例
scores = {}
print(add_score(scores, "小明", 85))
print(add_score(scores, "小红", 92))
print(add_score(scores, "小华", 78))
print(f"平均分:{get_average(scores):.1f}")
highest_student, highest_score = get_highest(scores)
print(f"最高分:{highest_student} - {highest_score}分")