如何将我在文本冒险(函数)中的位置保存到文件中?

How do I save my place in a text adventure (a function) to a file?

我正在开始一个初级的文字冒险游戏。我有一个原型可以工作,但是因为每个选择都是一个函数,所以我不知道如何安全地将我的位置保存在文件中。

我考虑过将函数的名称保存到文件中,但在读取文件后,我想不出一个从函数名称中获取函数的好方法 streval 在任意 str 上是出了名的不安全。我考虑过 dict 将每个函数映射到它的名称作为 str,但似乎随着更多选择的堆积,这个 dict 会使我的脚本膨胀。

def choice1():
    while True:
        text = input("A or B?: ")
        if text == "A":
            return False, choice2
        elif text == "B":
            saygameover()
            return True, None
        elif askedforsave(text):
            return True, choice1
        else:
            saytryagain()

def choice2():
    while True:
        text = input("C or D?: ")
        if text == "C":
            print("you win!")
            return True, None
        elif text == "D":
            saygameover()
            return True, None
        elif askedforsave(text):
            return True, choice2
        else:
            saytryagain()

def askedforsave(text):
    if text == "save":
        return True
    else:
        return False

def saytryagain():
    print("try again...")

def saygameover():
    print("game over.")

def play(choice = choice1):
    done = False
    while not done:
        done, choice = choice()
    if choice != None:
        save(choice)

def save(choice):
    pass

def load(file):
    pass
    return choice

这就是我到目前为止所得到的。当我已经在 globals() 中检查名称时,isidentifier 可能是不必要的,但这是确保您使用有效的 Python 名称而不是表达式的好技巧。

import types

def load(string):
        # if string is valid Python name
    if (string.isidentifier() and

        # if string in this global scope's symbol table
        string in (thisglobal := globals()) and

        # if object is a non-builtin function
        isinstance(something := thisglobal[string], types.FunctionType)):

        return something
    else:
        return nogame
    
def nogame():
    return True, None