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

Python中如何更新导入文件的变量?密码验证场景技术求助

解决Python跨模块变量更新同步问题

问题根源

你遇到的问题主要来自两个方面:

  1. 导入方式导致的本地副本:from Variables import passwordAccepted会把变量值复制一份到Player.py的本地命名空间,后续修改Variables.py中的原变量,不会同步到这个本地副本。
  2. 独立进程的内存隔离:如果分开运行Password.py和Player.py,两个脚本属于独立进程,内存中的变量无法跨进程共享,修改后的值不会保留到另一个进程中。

解决方案

方案1:同一进程内运行(通过主脚本串联)

如果希望在同一个Python进程中完成密码验证和玩家功能,修改导入方式并新增主脚本:

修改Player.py

直接导入Variables模块,通过模块引用访问变量,确保每次取到最新值:

import Variables

class Player:
    Inventory = []
    Level = 1

# 直接通过模块访问变量,获取最新状态
if Variables.passwordAccepted == 1:
    option = input("What do you want to see?\n1. Inventory\n2. Level\n\n")
    if option == "1" or option == "Inventory":
        print("\nYou have:")
        for x in Player().Inventory:
            print(x)
    elif option == "2" or option == "Level":
        print("\nYou are level", Player().Level)
    else:
        print("Either type in \"Inventory\" or type in \"Level\"")

新增Main.py(主入口)

通过主脚本先执行密码验证,再加载玩家功能,保证变量在同一个进程内:

import Password
import Player

运行Main.py即可实现变量同步。


方案2:独立进程运行(持久化变量到文件)

如果需要分开运行Password.py和Player.py,需要将变量状态持久化到文件,实现跨进程共享:

修改Variables.py

新增读写文件的方法,把变量状态存储到本地文件:

import os

# 存储状态的文件路径
STATUS_FILE = "password_status.txt"

def get_password_accepted():
    # 读取文件中的状态,不存在则返回初始值0
    if os.path.exists(STATUS_FILE):
        with open(STATUS_FILE, "r") as f:
            return int(f.read().strip())
    return 0

def set_password_accepted(value):
    # 将状态写入文件
    with open(STATUS_FILE, "w") as f:
        f.write(str(value))

# 初始化变量
passwordAccepted = get_password_accepted()

修改Password.py

调用Variables中的方法更新文件状态:

import Variables

password = ""  # 在这里填入你的密码
userInput = input("What is your password?\n")
if userInput == password:
    print("Access Granted")
    Variables.set_password_accepted(1)
else:
    print("Access Denied")
    Variables.set_password_accepted(0)

修改Player.py

从文件读取最新状态:

import Variables

class Player:
    Inventory = []
    Level = 1

# 从文件获取最新验证状态
passwordAccepted = Variables.get_password_accepted()
if passwordAccepted == 1:
    option = input("What do you want to see?\n1. Inventory\n2. Level\n\n")
    if option == "1" or option == "Inventory":
        print("\nYou have:")
        for x in Player().Inventory:
            print(x)
    elif option == "2" or option == "Level":
        print("\nYou are level", Player().Level)
    else:
        print("Either type in \"Inventory\" or type in \"Level\"")

运行Password.py后,状态会写入文件,再运行Player.py时会读取最新的验证结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:12:41