为什么即使我没有定义它,python也能识别我的对象?

时间:2012-09-07 08:54:46

标签: python

美好的一天!

我是否可以帮助我阅读一本书中的样本并尝试学习Python?

对于下面显示的代码。我从来没有定义“each_score”,为什么这个“each_score”被Python识别并运行良好?

scores={}
result_f=open("py score.txt")
for line in result_f:
    (name,score)=line.split()
    scores[score]=name
result_f.close()

print("The top scores were:")
for each_score in scores.keys():
    print('surfer '+scores[each_score]+' scored '+each_score)

顺便说一下,文本文件内容很简单,如下所示:

Johnny 8.65
Juan 9.12
Joseph 8.45
Stacey 7.81
Aideen 8.05
Zack 7.21
Aaron 8.31

3 个答案:

答案 0 :(得分:5)

不,您已在for loop

中对其进行了定义

在您的示例中,您的变量应该从键中获取第一个值,在第二个迭代中获取第二个值,依此类推。

答案 1 :(得分:2)

您正在循环中定义它。每次迭代each_score都会获得score.keys()的当前值。

答案 2 :(得分:1)

注意 - 不是答案,而只是一个不会在评论栏中格式化的大评论...只是一些学习的提示(我必须快速写,因为我的电池即将死... )

您应该在需要自动资源关闭的地方使用with(请查看精细的手册)...理解可能很有用(请参阅下面的dict位)。 ..'正确'命名变量也很好 - 在这种情况下surfer_scores ...解包诸如for surfer, score之类的元组也增加了可读性,使用字符串格式代替concat'ing也很有用。< / p>

因此,在完成必要的学习后,您的上述代码可能会变成:

with open('py score.txt') as fin:
    surfer_scores = dict(line.split() for line in fin)

for surfer, score in surfer_scores.iteritems():
    print('Surfer {} scored {} points'.format(surfer, score))