在具有行为的runnable codesnippet下面,我无法解释:
name_generator
应在每次迭代中创建一个新的LetterMan
对象,附加一个任意字母并将其生成。
在每次迭代中,一个字母以某种方式追加到所谓的新对象。脚本的结果是:
class LetterMan(object):
def __init__(self, name, letterlist=[]):
self.letterlist = letterlist
self.name = name
def add_letter(self, letter):
self.letterlist.append(letter)
def name_generator():
for name in ["Andrew", "Bryan", "Casey"]:
l = LetterMan(name)
l.add_letter(name[-1])
yield l
if __name__ == '__main__':
n = name_generator()
for lman in n:
print lman.name, lman.letterlist
# Andrew ['w']
# Bryan ['w', 'n']
# Casey ['w', 'n', 'y']
我期待:
# Andrew ['w']
# Bryan ['n']
# Casey ['y']
这是某种优化吗? 为什么每次迭代都没有创建新对象? 我如何达到预期的效果?
我已经尝试在每个yield
之后删除对象而没有结果
我在ubuntu上使用python 2.7.3