You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python钱包系统开发:如何创建可被函数修改且保留历史的变量?

解决方法

1. 使用全局变量

在函数内部通过global关键字声明要使用全局作用域的balance变量,这样函数就能直接修改外部的余额值,而非创建局部变量。

balance = 0

def addmoney(x):
    global balance
    balance += x

def withdraw(x):
    global balance
    if balance >= x:
        balance -= x
    else:
        print("余额不足")

addmoney(10000)
print(balance)  # 输出10000
withdraw(3000)
print(balance)  # 输出7000

每次调用函数时,都会基于当前的全局余额进行更新,不会重置初始值。

2. 使用类封装(推荐)

对于钱包这类有状态的功能,用类封装数据和操作是更规范的方案,符合面向对象设计思路,还能避免全局变量的潜在问题。

class Wallet:
    def __init__(self):
        self.balance = 0

    def addmoney(self, x):
        self.balance += x

    def withdraw(self, x):
        if self.balance >= x:
            self.balance -= x
        else:
            print("余额不足,无法取款")

# 创建独立的钱包实例
my_wallet = Wallet()
my_wallet.addmoney(10000)
print(my_wallet.balance)  # 输出10000
my_wallet.withdraw(4000)
print(my_wallet.balance)  # 输出6000

每个钱包实例都有自己独立的余额状态,调用实例方法时会直接修改该实例的余额,状态会被持久保存,还能创建多个互不干扰的钱包。

3. 使用闭包

如果不想用类,闭包可以在函数内部维护私有状态,既避免全局变量,又能持久保存余额数据。

def create_wallet():
    balance = 0

    def addmoney(x):
        nonlocal balance
        balance += x

    def withdraw(x):
        nonlocal balance
        if balance >= x:
            balance -= x
        else:
            print("余额不足")

    def get_balance():
        return balance

    return addmoney, withdraw, get_balance

# 生成钱包操作函数
add, withdraw, get_bal = create_wallet()
add(10000)
print(get_bal())  # 输出10000
withdraw(2000)
print(get_bal())  # 输出8000

balance被封装在create_wallet内部,只能通过返回的操作函数修改和查询,保证了数据的封装性。

内容的提问来源于stack exchange,提问作者Luke Jordan Anderson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:15:41