Python 我怎么了?关于';一行用于语句';和';执行官';
嗨,我是python新手(也是编程语言)。我想了这么长时间,但最后我决定问。上面的代码对我来说很好。但当我试图更改到下面的代码时,它不起作用。而且没有具体的错误消息。它只会给我类似“无效语法(,第1行)”的消息。我使用的是2.7.6版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(
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