Python 我怎么了?关于';一行用于语句';和';执行官';

Python 我怎么了?关于';一行用于语句';和';执行官';,python,for-loop,exec,Python,For Loop,Exec,嗨,我是python新手(也是编程语言)。我想了这么长时间,但最后我决定问。上面的代码对我来说很好。但当我试图更改到下面的代码时,它不起作用。而且没有具体的错误消息。它只会给我类似“无效语法(,第1行)”的消息。我使用的是2.7.6版 r = [] for e in self.leftCounter[0]: r.append(0) for i in self.leftCounter: r = map(

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

        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
有人能给我一个提示吗?
谢谢。

不要使用
exec
。使用,而不是:

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

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)

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

要提示吗?永远不要使用
exec
,除非这是唯一的方法。非常感谢Martijin Pieters,我将学习getattr()和setattr()。它真的帮助了我!(我会在8分钟后接受答案)为什么要首先使用属性的字符串表示?@wim:实际上,你可以现在添加一个切片赋值。
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