我不太懂得怎么说我的问题,因为这不是人们经常会做的事情。 这是我的情况:如何从执行的字符串中检索值?
我有一个值列表。
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字符串中'功能,我写的‘打印(出)’ IE:
string = "{}".format(exec(
"Out= ''\n"
"for value in Values:\n"
" Out+= value + ','\n"
"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中制作游戏。有一个Character类,它包含各种数据类型的各种属性(如dict,list,int,str,float ....以及一些自定义的属性:AI,Item,ActiveSkill,PassiveSkill,Effect,Weapon,Armor等等......) 现在,我的计划是能够将游戏进程存储在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和Effects也重复此操作。最后,用“}”关闭json字符串,并将其添加到'json'(字符串类型)变量中...我想要最小化由此占用的空间,并且我希望此系统可以灵活,所以无论你拥有多少技能,你都可以在不改变代码的情况下继续添加越来越多的这些json字符串。
请看['str.join()'](https://docs.python.org/3/library/stdtypes.html#str.join)。 –
当一个列表传入JSON。人们需要担心逗号。同样,当你提取列表时,你也不需要担心逗号。 JSON为你担心。除非我在这里得到错误的想法.... –
@ El'endiaStarman 是的,但后来我提出了一种情况,我有一个对象列表,我从中调用一个返回值的方法。我应该创建一个新的列表吗? IE:'技能= [i.encode_to_json:对于我在ActiveSkills中]',然后按照你的建议'json + =“,”。join(Skills)'? – Alexz