创建来自列表的对象

2024-10-02 12:36:18 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我有这个代码:

earth = makeWorld()

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

我想做的是遍历这个列表,所以我为列表中的每个名字做一个海龟。这显然是错误的,因为乌龟只会继续前进name.forward转发(),并在列表中使用“name”而不是“Bill”或“Fred”。所以它用的是名字而不是名单上的名字。但我不知道该怎么纠正?你知道吗


Tags: 代码namein列表fordeffred名字
3条回答

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

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作为变量名是个坏主意,因为这会隐藏内置列表类型。虽然您通常可以在一个简短的函数中侥幸逃脱,但如果您在模块的顶层执行此操作,则可能会导致非常混乱的错误。你知道吗

你可以用一个列表来列出你的新毛衣。你知道吗

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

这将为每个名称创建一个新的turtle,但看起来您并没有以任何方式使用该名称,因此您可能会重新考虑如何定义makeTutle

除了打印外,您没有使用name。然后用makeTurtle(earth)返回的值替换name中的值。你知道吗

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

turtle = makeTurtle(earth)

然后可以使用turtle为该名称执行某些操作,但需要在循环体中使用turtle。你知道吗

或者,创建一个字典将名字与海龟联系起来:

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

现在你有了一个从名字到海龟对象的映射。你知道吗

相关问题 更多 >

    热门问题