从列表中创建对象

时间:2013-05-20 23:18:27

标签: python list object

好的,我有这段代码:

earth = makeWorld()

def turtle():
  list = ['Bill', 'Fred']
  for name in list:
    print name
    name = makeTurtle(earth)

我想要做的是遍历列表,以便为列表中的每个名称制作一只乌龟。这显然是错误的,因为乌龟只在name.forward()上移动并且在列表中使用'name'而不是'Bill'或'Fred'。所以它使用的名称不是列表名称。但我不知道如何纠正这个问题?

3 个答案:

答案 0 :(得分:2)

除了打印之外,您没有使用name。然后,替换<{em> name中的值makeTurtle(earth)返回。

从某些context看起来makeTurtle()为您创建了一个海龟对象

turtle = makeTurtle(earth)

然后您可以使用turtle为该名称执行某些操作,但您需要在循环体内使用turtle

或者,创建一个字典以将名称连接到海龟:

turtles = {name: makeTurtle(earth) for name in yourlist}

现在你有了从名字到乌龟对象的映射。

答案 1 :(得分:1)

最好的解决方案是使用字典来保存名称 - 对象对:

earth = makeWorld()
names = ['Bill', 'Fred']

turtles = {} # empty dictionary
for name in names:
    turtles[name] = makeTurtle(earth)

现在您可以使用turtles字典访问任何命名对象:

turtles['Bill'].do_something()

您还可以使用“dict comprehension”构建字典,而不是将其创建为空并将鼠标添加到显式循环中:

turtles = { name: makeTurtle(earth) for name in names }

顺便说一句,使用list作为变量的名称是个坏主意,因为它会影响内置列表类型。虽然你可以经常在一个简短的函数中使用它,但是如果你在模块的顶层执行它会导致非常混乱的错误。

答案 2 :(得分:0)

您可以使用列表理解来列出新的turles。

def turtle_generator(names):
    for name in names:
        yield (name, makeTurtle(earth))

def turtle_list(names):
    return [(name, makeTurtle(earth)) for name in names]


for (name, turtle) in turtle_xxx(['Bill', 'Fred']):
    print name
    print turtle

这将为每个名称创建一个新的乌龟,但看起来你不会以任何方式使用该名称,所以你可能会重新考虑如何定义makeTutle