Python 3.x Python:在循环中创建字典:{int,class object}
我想在循环中创建一个命令式:{int,Class},但是类对象被重写。 我很确定这是一个基本问题,但我被卡住了Python 3.x Python:在循环中创建字典:{int,class object},python-3.x,Python 3.x,我想在循环中创建一个命令式:{int,Class},但是类对象被重写。 我很确定这是一个基本问题,但我被卡住了 class Simple: simpleDic = { 'name': {""}, 'age': {1}} def __init__(self, name, age): self.simpleDic['name'] = name self.simpleDic['age'] = age
class Simple:
simpleDic = {
'name': {""},
'age': {1}}
def __init__(self, name, age):
self.simpleDic['name'] = name
self.simpleDic['age'] = age
def __str__(self):
return "{} {}\n".format(self.simpleDic['name'], self.simpleDic['age'])
def foo():
myDict = {}
for x in range(3):
myDict[x] = Simple('Name' + str(x), x)
print(('{}: {}\n'.format("Creating", myDict[x])))
for key in myDict:
print(('{}: {}\n'.format("Printing" + str(key), myDict[key])))
#### Main program here ####
foo()
结果如下:
你的问题在最后一次打印上 您正在打印
myDict[x]
何时应该打印myDict[key]
x包含第一次迭代中的最后一个值,因此实际上是在到处打印同一个键
以下是您在本评论中提出的问题:
class Simple:
def __init__(self, name, age):
self.simpleDic = {"name": name, "age": age}
def __str__(self):
return "{} {}\n".format(self.simpleDic['name'], self.simpleDic['age'])
def __repr__(self):
return "{} {}\n".format(self.simpleDic['name'], self.simpleDic['age'])
def foo():
myDict = {}
for x in range(3):
myDict[x] = Simple('Name' + str(x), x)
print(('{}: {}\n'.format("Creating", myDict[x])))
print(myDict)
天哪,这是多么愚蠢的错误。对此我很抱歉。发生在我们当中最好的人身上:)如果我像现在讨论的那样更改了代码(用字典替换了简单变量):那么它将失败,因为myDict属于
foo
函数的范围,您将得到一个NameError:name'myDict'未定义
您可以在foo函数中返回myDict
,并将其分配给全局作用域上的一个变量(在循环之前)