Python函数基础

在本章节中,您将学习Python函数的基础知识,包括函数的定义、参数传递、返回值、作用域等概念。 函数是程序中的重要组成部分,它可以帮助我们组织代码、提高代码复用性和可维护性。

函数定义与调用

什么是函数?

函数是一段可重复使用的代码块,它可以接收输入(参数),执行特定的操作,并返回结果。

函数的基本语法

# 定义一个简单的函数
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:计算器函数

创建一个简单的计算器函数,要求:

  1. 支持加、减、乘、除四种运算
  2. 包含错误处理(如除以零)
  3. 返回计算结果

参考代码:

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}分")