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

Python如何将word值存入usedDB.py的used_words_list列表

核心实现原理

用from usedDB import used_words_list导入列表时,本质是把usedDB模块中used_words_list的对象引用加载到当前程序的内存空间,这里有两个关键逻辑:

  • 列表是可变类型,原地调用append()、extend()这类方法修改时,所有引用这个列表的位置都会拿到更新后的值;但如果直接给变量名做赋值操作(比如used_words_list = [新值]),只会让当前作用域的变量指向新对象,不会修改原模块的列表,更不会改动磁盘上的文件。
  • 所有内存中的修改会在程序退出后直接清空,不会自动同步回磁盘上的usedDB.py文件。要实现持久化存储(程序重启后数据仍保留),必须手动通过文件IO操作把更新后的内容写回磁盘。
可选实现方案

方案1:运行时临时追加(不修改磁盘文件,程序重启后数据重置)

适合只需要在程序运行期间记录单词、不需要永久保存的场景,直接调用列表的append()方法做原地修改即可,不需要额外操作文件。
修正后的主程序代码:

from usedDB import used_words_list
# 补全原代码缺失的依赖导入
from termcolor import cprint
from pyfiglet import figlet_format


def word_len(word):
    word = word.strip()
    if len(word) <= 5:
        print("Not enough letters. Try again!")
        return None
    elif len(word) in (6,7,8):
        print("Your word is solid :)")
    elif len(word) in (9,10):
        print("Your word is amazing...")
    elif len(word) == 11:
        print("Your word really amaze me... :) + You're so close to kaboom!!!")
    elif len(word) == 12:
        cprint(figlet_format('KABOOM!!!', font='smkeyboard'),
               'green', attrs=['bold'])
    else:
        print("U know rules? Try Again please!")
        return None

    # 校验通过的单词直接追加到内存中的列表
    used_words_list.append(word)
    print(f"已记录单词,当前列表:{used_words_list}")
    return word


word_len(input("Type your word: "))

注意:这个方案的修改只在当前程序运行周期内生效,重启程序后used_words_list会回到usedDB.py中定义的初始值[""]。

方案2:持久化写入磁盘(程序重启后数据保留)

如果需要每次添加的单词永久保存,就要把更新后的列表写回usedDB.py文件。不推荐手动拼接Python代码字符串写文件,容易触发语法错误导致模块无法导入,这里用标准库ast安全解析和修改内容:

from usedDB import used_words_list
from termcolor import cprint
from pyfiglet import figlet_format
import ast

def save_word(new_word):
    # 读取磁盘上的usedDB.py文件内容
    with open("usedDB.py", "r", encoding="utf-8") as f:
        file_content = f.read()
    # 安全解析原文件中的列表
    list_def_part = file_content.split("used_words_list =", 1)[1].strip()
    original_list = ast.literal_eval(list_def_part)
    # 追加新词,可根据需求选择是否去重
    if new_word not in original_list:
        original_list.append(new_word)
    # 把更新后的列表写回文件
    with open("usedDB.py", "w", encoding="utf-8") as f:
        f.write(f"used_words_list = {repr(original_list)}")
    # 同步更新当前内存中的列表
    used_words_list.clear()
    used_words_list.extend(original_list)


def word_len(word):
    word = word.strip()
    if len(word) <= 5:
        print("Not enough letters. Try again!")
        return None
    elif len(word) in (6,7,8):
        print("Your word is solid :)")
    elif len(word) in (9,10):
        print("Your word is amazing...")
    elif len(word) == 11:
        print("Your word really amaze me... :) + You're so close to kaboom!!!")
    elif len(word) == 12:
        cprint(figlet_format('KABOOM!!!', font='smkeyboard'),
               'green', attrs=['bold'])
    else:
        print("U know rules? Try Again please!")
        return None

    # 校验通过后持久化存储
    save_word(word)
    return word


word_len(input("Type your word: "))

更稳妥的持久化建议:动态变化的业务数据不要存在Python代码文件里,换成JSON、TXT或者轻量数据库存储更合适,读写逻辑更简单,也不会出现代码文件损坏的问题。

常见失败原因
  • 对导入的used_words_list做重新赋值操作(比如used_words_list = used_words_list + [word]),只会在当前作用域创建新变量,不会修改原列表对象
  • 误以为内存修改会自动同步到磁盘,Python没有自动回写模块源文件的机制,所有磁盘修改都需要显式调用文件读写接口
  • 手动拼接字符串写回py文件时没有处理特殊字符,导致usedDB.py出现语法错误,后续导入直接失败
  • 没有做输入合法性判断,把长度不符合要求的单词也存入了列表

内容的提问来源于stack exchange,提问作者Klemen Horvat-Novak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 11:06:33