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

Python 如何从执行的字符串中检索值?,python,json,string,exec,Python,Json,String,Exec,我不太知道如何表达我的问题,因为这不是人们经常做的事情。 我的情况如下: 我有一个价值清单 Values= ["1","2","3","4"] 然后,我希望能够分别访问每个值,并将它们组合成一个字符串,中间带有逗号。我写了一段代码,希望以这样的方式格式化字符串({}.format()),结果如下所示:“1,2,3,4”。到目前为止,我的代码(如果可能的话,这也是我更喜欢使用的代码结构)如下所示: string = "{}".format(exec( "Out= ''\n" "f

我不太知道如何表达我的问题,因为这不是人们经常做的事情。 我的情况如下:

我有一个价值清单

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)” 即:

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

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

string = "{}".format(exec(
    "def do_stuff():\n"
    "    Out = ''\n"
    "    for value in Values :\n"
    "       Out += value + ','\n"
    "    return Out \n"
    "do_stuff()"))
现在,我确实意识到这种组合字符串的方法远不是组合字符串的首选方法,但让我给你一些上下文

我正在用python做一个游戏。有一个角色类,它包含各种数据类型的各种属性(如dict、list、int、str、float……以及一些自定义属性:AI、物品、主动技能、被动技能、效果、武器、盔甲等) 现在,我的计划是能够将游戏进度存储在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字符串中,然后手动用“},{”打开和关闭,并确保末尾没有“,”。然后对被动技能和效果重复此操作。最后,用“}”关闭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}}

所以,除非你真的需要,否则不要滚动你自己的编码器。

要使用
加入列表,“

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)

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

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

看看。当列表被传递到JSON中时。人们确实需要担心逗号。此外,当您将列表提取回来时,也不需要担心逗号。JSON为你担心。除非我这里的想法是错误的…@El'endiaStarman是的,但稍后我会介绍一种情况,在这种情况下,我有一个对象列表,从中调用一个返回值的方法。然后我应该创建一个新列表吗?IE:
Skills=[i.encode\u to\u json:for i in ActiveSkills]
后面跟着,正如你建议的那样,“
json+=”,”。加入(Skills)
?你的解释仍然不清楚你为什么要使用
exec
。只要在exec-ed字符串中执行任何操作,将其移出到实际函数中,调用它,并存储结果即可。是的,不要使用exec-请参阅我关于使用json或pickle的回答。请看。当列表传递到json时。人们确实需要担心逗号。此外,当您将列表提取回来时,也不需要担心逗号。JSON为你担心。除非我这里的想法是错误的…@El'endiaStarman是的,但稍后我会介绍一种情况,在这种情况下,我有一个对象列表,从中调用一个返回值的方法。然后我应该创建一个新列表吗?IE:
Skills=[i.encode\u to\u json:for i in ActiveSkills]
后面跟着,正如你建议的那样,“
json+=”,”。加入(Skills)
?你的解释仍然不清楚你为什么要使用
exec
。只需在exec-ed字符串中执行任何操作,将其移动到实际函数中,调用它并存储结果。是的,不要使用exec-请参阅我关于使用json或pickle的回答。问题是,我要保存在json文件中的数据分散在不同的对象中(例如:字符有自己的属性,但字符的技能也有。)要将所有数据存储为一棵树,我要求每个对象创建一个json语法的字符串,然后该字符串将与该对象引用的任何对象组合(每个对象只被另一个对象引用。这样我就有了一个层次结构,我正试图对