繁体   English   中英

如何从执行的字符串中检索值?

[英]How to retrieve a value from an executed string?

我不太清楚该如何表达我的问题,因为这不是人们经常会做的事情。 这是我的情况:

我有一个值列表。

Values= ["1","2","3","4"]

然后,我希望能够分别访问每个值,并将它们组合成一个字符串,并在它们之间使用逗号。 我写了一些代码,希望以这种方式格式化字符串('{}'。format()),以使结果看起来像这样:'1,2,3,4'。 到目前为止,我的代码如下(如果可能,它也是我更喜欢使用的代码结构):

string = "{}".format(exec(
    "Out= ''\n"
    "for value in Values:\n"
    "    Out+= value + ','\n"
    "Out"))
print(string)

如果在作为“ exec”函数的参数给出的字符串中,我编写“ print(Out)” IE:

string = "{}".format(exec(
    "Out= ''\n"
    "for value in Values:\n"
    "    Out+= value + ','\n"
    "print(Out)"))

然后,程序将正确运行并打印出“ 1、2、3、4”,但不会将其存储在“字符串”中(这是可以预期的)

因此,我考虑添加一个函数以确保它可以返回某些内容。 我写了以下内容,但正如预期的那样,它也不起作用。 字符串仍然是None:

string = "{}".format(exec(
    "def do_stuff():\n"
    "    Out = ''\n"
    "    for value in Values :\n"
    "       Out += value + ','\n"
    "    return Out \n"
    "do_stuff()"))

现在,我的确意识到这种组合字符串的方法远不及组合字符串的首选方法,但是让我给您一些背景知识。

我正在用python做游戏。 有一个Character类,它包含各种数据类型的各种属性(例如dict,list,int,str,float ....以及一些自定义的属性:AI,Item,ActiveSkill,PassiveSkill,Effect,武器,护甲等等...)现在,我的计划是能够将游戏进度存储在json树中。 为此,我开始为每个实体提供一个方法,该方法会将其所有属性转换为存储为字符串的json树。 这样,当我要保存游戏并涉及角色时,它将对所有属性进行排序,但是还必须调用其引用的对象(例如ActiveSkills)。 对于列表中的每个ActiveSkills,都必须调用自己的json语法字符串,并使用逗号将它们组合在一起。

这是我的一些代码,可帮助您了解我想做什么:

json += \
    '"ActiveSkills":[{oActiveSkills}],' \
    '"PassiveSkills":[{oPassiveSkills}].' \
    '"Effects":[{oEffects}],'.format(
        oActiveSkills=exec(
            "Skills = ''\n"
            "for skill in self.ActiveSkills:\n"    # ActiveSkills is a list of ActiveSkill objects
            "    Skills+=skill.encode_to_json() + ','\n"
            "return Skills"),
        oPassiveSkills=exec(
            "Skills = ''\n"
            "for skill in self.PassiveSkills:\n"    # PassiveSkills is a list of PassiveSkill objects
            "    Skills+=skill.encode_to_json() + ','\n"
            "return Skills"),
        oEffects=exec(
            "Effects = ''\n"
            "for effect in self.Effects:\n"    # Effects is a list of Effect objects
            "    Effects+=effect.encode_to_json() + ','\n"
            "return Effects"))

我知道该代码目前无法运行,因为您只能从一个函数中返回,但是我真的不知道如何快速简便地进行操作。

我没有想到的一种解决方法是手动完成所有操作。 IE:具有某种for循环,可根据返回的值创建一个字符串。 将此字符串添加到json字符串中,之后您将使用“},{”手动打开和关闭,并确保最后没有“,”。 然后对PassiveSkills and Effects也重复此步骤。 最后,使用“}”关闭json字符串,并将其添加到“ json”(字符串类型)变量中...

我想最小化它占用的空间,并且我希望该系统具有灵活性,以便无论列表中有多少技能,您都可以继续添加越来越多的这些json字符串而无需更改代码。

要使用','加入列表:

Values = ["1","2","3","4"]
result = ",".join( Values )
print(result)

有关更多信息str.join(iterable) ,可以发现这里的在线文档。

为了更好地存储字典和列表(以及使用pickle对象),您应该查看Python标准库中的json和pickle包。

例如,使用json:

import json

mydata = {}
mydata['hello'] = { 'value1':1, 'valuuelist':[1,2,3,4] }

print(json.dumps(mydata))

输出:

{"hello": {"valuuelist": [1, 2, 3, 4], "value1": 1}}

因此,除非确实需要,否则不要滚动自己的编码器。

要将序列中的每个元素连接到字符串中,可以使用join方法。

   L=['1','2','3']
   string=",".join(L)
   print(L)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM