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

如何移除代码中的全局变量?以全局points变量为例寻求解决方案

如何移除全局变量points?

嘿,我太懂你被全局变量points缠了一周的烦躁了——全局变量不仅让代码耦合度变高,后续维护起来也容易踩坑。咱们直接上两种可行的方案,帮你把它彻底换掉!

方案一:参数传递+返回值(小项目首选,改动量小)

你的代码流程是init() → choice() → play_game() → guessing_capital(),points在guessing_capital()里首次被使用,直到数值达到5。那我们可以把points作为参数在函数间传递,修改后再返回更新的值,完全不需要全局变量:

  1. 首先修改init(),去掉global声明,直接初始化points,然后把它和其他状态一起传给choice():
def init():
    points = 0
    hidden_password = []
    hidden_password2 = []
    country = ""
    used = []
    start_time = datetime.now()
    welcome()
    # 把所有需要的状态都作为参数传递给choice
    choice(points, hidden_password, hidden_password2, country, used, start_time)
  1. 接着更新choice(),接收参数后,把points传递给play_game():
def choice(points, hidden_password, hidden_password2, country, used, start_time):
    # 保留你原本的用户选择逻辑
    # 当需要进入游戏时,把points等参数传给play_game
    play_game(points, hidden_password, hidden_password2, country, used, start_time)
  1. 然后是play_game(),接收points,调用guessing_capital()时传递它,并且接收返回的更新后的值:
def play_game(points, hidden_password, hidden_password2, country, used, start_time):
    # 你的原有游戏准备逻辑
    # 调用guessing_capital并接收更新后的points
    points = guessing_capital(points, hidden_password, hidden_password2, country, used, start_time)
    # 如果后续还有需要用到points的逻辑,继续传递这个更新后的值
  1. 最后修改核心的guessing_capital(),接收points参数,修改后返回它:
def guessing_capital(points, hidden_password, hidden_password2, country, used, start_time):
    # 这里是你原本使用points的逻辑,比如:
    while points < 5:
        # 用户猜对后的操作
        points += 1
        # 其他游戏逻辑...
    # 返回更新后的points,让上层函数可以继续使用
    return points

方案二:类封装状态(适合功能扩展的项目,结构更清晰)

如果你的游戏后续可能会加更多功能,把所有游戏状态封装成一个类会更合理——所有变量都是类的属性,函数作为类的方法,完全不用全局变量:

import datetime

class CapitalGame:
    def __init__(self):
        # 把原来的全局变量都变成类的实例属性
        self.points = 0
        self.hidden_password = []
        self.hidden_password2 = []
        self.country = ""
        self.used = []
        self.start_time = datetime.datetime.now()
        self.welcome()
        self.choice()

    def welcome(self):
        # 原来的welcome逻辑,直接用self访问属性即可
        print("欢迎来到猜首都游戏!")

    def choice(self):
        # 原有的用户选择逻辑,调用play_game直接用self.play_game()
        print("开始游戏!")
        self.play_game()

    def play_game(self):
        # 原有的游戏准备逻辑
        self.guessing_capital()

    def guessing_capital(self):
        # 直接操作self.points,不需要传参
        while self.points < 5:
            print(f"当前分数:{self.points}")
            # 模拟猜对操作
            self.points += 1
        print(f"恭喜!你达到了5分!")

# 启动游戏
if __name__ == "__main__":
    CapitalGame()

这样所有状态都集中在类里,代码结构更清晰,后续加新功能也更容易维护。

两种方案都能完美解决你的问题,要是项目小、不想改太多代码,选方案一;要是打算扩展功能,方案二更合适。

内容的提问来源于stack exchange,提问作者Kaspazza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:18:39