【Python快速入门和实践005】Python中的函数

5. 函数

函数是组织代码的基本单元,用于将特定的功能封装起来,避免重复代码并提高代码的可读性和可维护性。

   5.1 函数的定义与调用

函数通过 def 关键字定义,可以接收参数并返回结果。

# 定义一个简单的函数
def greet(name):
    return f"Hello, {name}!"

# 调用函数
message = greet("Alice")  # "Hello, Alice!"

   5.2 函数参数

函数可以接收参数,在调用时根据传入的参数执行相应的逻辑。

     5.2.1 位置参数与关键字参数

  • 位置参数:按位置顺序传递给函数。
  • 关键字参数:通过参数名传递,顺序无关。
def describe_person(name, age):
    return f"{name} is {age} years old."

# 位置参数调用
description = describe_person("Bob", 25)  # "Bob is 25 years old."

# 关键字参数调用
description = describe_person(age=30, name="Charlie")  # "Charlie is 30 years old."

     5.2.2 默认参数值

函数参数可以有默认值,如果调用时未提供该参数,则使用默认值。

def greet(name, message="Hello"):
    return f"{message}, {name}!"

# 使用默认参数
greeting = greet("Alice")  # "Hello, Alice!"

# 覆盖默认参数
greeting = greet("Alice", "Hi")  # "Hi, Alice!"

     5.2.3 可变参数(*args 和 **kwargs)

  • *args:接收任意数量的位置参数,作为一个元组传递。
  • **kwargs:接收任意数量的关键字参数,作为一个字典传递。
# *args 示例
def sum_numbers(*args):
    return sum(args)

total = sum_numbers(1, 2, 3, 4)  # 10

# **kwargs 示例
def display_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

display_info(name="Alice", age=30, city="New York")
# 输出:
# name: Alice
# age: 30
# city: New York

   5.3 返回值

函数可以返回值,使用 return 语句。如果不显式返回值,默认返回 None

def add(a, b):
    return a + b

result = add(5, 3)  # 8

def do_nothing():
    pass

result = do_nothing()  # None

   5.4 作用域与全局变量

  • 局部变量:是在函数内部定义的变量,只能在函数内部使用。函数执行完毕后,这些局部变量就会被销毁,无法在函数外部访问。
def print_message():
    message = "Hello, World!"  # 这是一个局部变量
    print(message)

print_message()  # 输出: Hello, World!

# 尝试在函数外部访问局部变量
print(message)  # 报错: NameError: name 'message' is not defined
  • 全局变量:是在函数外部定义的变量,可以在整个程序中访问。如果需要在函数内部修改全局变量的值,则必须使用 global 关键字。
counter = 0  # 这是一个全局变量

def increment_counter():
    global counter  # 使用 global 关键字声明 counter 是全局变量
    counter += 1  # 修改全局变量的值

increment_counter()
print(counter)  # 输出: 1

increment_counter()
print(counter)  # 输出: 2

   5.5 匿名函数 (lambda)

lambda 表达式用于定义匿名函数,通常用于简单的操作或作为短小的回调函数。

# 定义一个匿名函数并立即调用
result = (lambda x, y: x + y)(5, 3)  # 8

# 作为参数传递给高阶函数
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))  # [1, 4, 9, 16, 25]

   5.6 内置函数和自定义函数

  • 内置函数:Python 提供的现成的函数,如 len(), sum(), max(), min() 等。
  • 自定义函数:用户根据需要定义的函数。
numbers = [1, 2, 3, 4, 5]

# 求列表长度
length = len(numbers)  # 5

# 求和
total = sum(numbers)  # 15

# 求最大值
maximum = max(numbers)  # 5
def multiply(a, b):
    return a * b

result = multiply(4, 5)  # 20

5.7 综合例子

简单的银行账户管理系统

这个综合示例展示了如何使用函数、全局变量、局部变量、函数参数、返回值、lambda 表达式等知识点来创建一个简单的银行账户管理系统。该系统允许用户创建账户、存款、取款和查看账户余额。

# 全局变量,用于存储所有账户信息
accounts = {}

# 1. 创建账户函数
def create_account(account_id, name, initial_balance=0):
    global accounts  # 使用全局变量 accounts
    if account_id in accounts:
        return "Account already exists."
    accounts[account_id] = {
        "name": name,
        "balance": initial_balance
    }
    return "Account created successfully."

# 2. 存款函数
def deposit(account_id, amount):
    global accounts
    if account_id not in accounts:
        return "Account not found."
    
    if amount <= 0:
        return "Deposit amount must be positive."
    
    accounts[account_id]["balance"] += amount
    return f"Deposited {amount} to account {account_id}."

# 3. 取款函数
def withdraw(account_id, amount):
    global accounts
    if account_id not in accounts:
        return "Account not found."
    
    if amount <= 0:
        return "Withdrawal amount must be positive."
    
    if accounts[account_id]["balance"] < amount:
        return "Insufficient funds."
    
    accounts[account_id]["balance"] -= amount
    return f"Withdrew {amount} from account {account_id}."

# 4. 查看余额函数
def check_balance(account_id):
    global accounts
    if account_id not in accounts:
        return "Account not found."
    
    balance = accounts[account_id]["balance"]
    return f"Account {account_id} balance: {balance}"

# 5. 使用匿名函数 (lambda) 排序账户,根据余额从高到低
def sort_accounts_by_balance():
    sorted_accounts = sorted(accounts.items(), key=lambda x: x[1]["balance"], reverse=True)
    return sorted_accounts

# 示例操作
# 创建账户
print(create_account(101, "Alice", 1000))  # Account created successfully.
print(create_account(102, "Bob", 500))    # Account created successfully.

# 存款
print(deposit(101, 200))  # Deposited 200 to account 101.

# 取款
print(withdraw(102, 100))  # Withdrew 100 from account 102.

# 查看余额
print(check_balance(101))  # Account 101 balance: 1200
print(check_balance(102))  # Account 102 balance: 400

# 查看排序后的账户列表
sorted_accounts = sort_accounts_by_balance()
print("Accounts sorted by balance:")
for account in sorted_accounts:
    account_id, info = account
    print(f"Account {account_id}, Name: {info['name']}, Balance: {info['balance']}")
# 输出:
# Accounts sorted by balance:
# Account 101, Name: Alice, Balance: 1200
# Account 102, Name: Bob, Balance: 400
解释:
  1. 全局变量 accounts 用于存储所有账户信息,每个账户的信息由字典表示,字典的键为账户ID,值为包含账户持有人姓名和余额的字典。

  2. 创建账户函数 create_account:通过传入账户ID、姓名和初始余额创建一个新账户,并将其添加到全局变量 accounts 中。如果账户ID已存在,则返回错误信息。

  3. 存款函数 deposit:通过传入账户ID和存款金额,将金额添加到指定账户的余额中。

  4. 取款函数 withdraw:通过传入账户ID和取款金额,从指定账户的余额中扣除金额。如果余额不足,则返回错误信息。

  5. 查看余额函数 check_balance:通过传入账户ID,返回该账户的当前余额。

  6. 排序函数 sort_accounts_by_balance:使用 lambda 表达式对账户进行排序,按余额从高到低排序,并返回排序后的账户列表。

        这个示例展示了如何在一个简单的程序中综合运用多个Python编程概念,如函数、参数传递、全局变量和局部变量、匿名函数(lambda),以及如何对字典进行排序。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值