gpt4 book ai didi

python - 我有什么错吗?大约 'one-line FOR statement'和 'EXEC'

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:04 25 4
gpt4 key购买 nike

        r = []
for e in self.leftCounter[0]:
r.append(0)
for i in self.leftCounter:
r = map(operator.__add__, r, i)
self.leftCounter = r

r = []
for e in self.rightCounter[0]:
r.append(0)
for i in self.rightCounter:
r = map(operator.__add__, r, i)
self.rightCounter = r

r = []
for e in self.neutralCounter[0]:
r.append(0)
for i in self.neutralCounter:
r = map(operator.__add__, r, i)
self.neutralCounter = r

嗨,我是 python 新手(也是编程语言)。我自己想了很久,最后还是决定问一问。上面的代码对我来说效果很好。但是当我尝试更改下面的代码时,它不起作用。而且没有具体的错误消息。它只是给我类似“无效语法(第 1 行)”的消息。我使用的是2.7.6版本。

        r = []
for i in ['self.leftCounter', 'self.rightCounter', 'self.neutralCounter']:
exec '[r.append(0) for e in %s[0]]' % i
exec '[r = map(operator.__add__, r, i) for i in %s]' % i
exec '%s = r' % i

有人可以给我提示吗?谢谢。

最佳答案

不要使用exec。使用getattr()setattr()相反:

for name in ['leftCounter', 'rightCounter', 'neutralCounter']:
r = getattr(self, name)[0]
for i in getattr(self, name):
r = map(operator.__add__, r, i)
setattr(self, name, r)

如果您的输入列表确实是静态的,您可以只存储对属性的直接引用:

for attr in (self.leftCounter, self.rightCounter, self.neutralCounter):
r = attr[0]
for i in attr:
r = map(operator.__add__, r, i)
attr[:] = r

假设所有三个属性始终都是列表,允许我们使用切片分配来替换每个列表的内容,而不是重新绑定(bind)。

关于python - 我有什么错吗?大约 'one-line FOR statement'和 'EXEC',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20709072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com