-3

几周前,我开始学习 Python,我想掌握它的最佳方法是直接进入,制作一个简单的(?)基于文本的游戏,可以选择保存进度并将保存的游戏重新加载到稍后继续。

因为我需要它来编写一个包含多个嵌套列表和字典(而不是简单的字符串)的保存对象,所以我选择了 Pickle。

出了什么问题:save() 函数本身可以正常工作,但我稍后需要访问其中的两个变量。出于某种原因,无论我做什么,save() 都不会返回 savePath 和 saveName;它抛出一个 NameError: savePath/saveName is not defined。我确信我错过了一些非常愚蠢和明显的东西,但我看不出是什么。

PS 我为我的代码的混乱道歉——我还没有真正学会如何有效地编码。

为此,我删除了工作功能并简化了类,但本质上其他一切都是一样的。

http://pastebin.com/x7UPYe5T

任何想法将不胜感激。我只知道当我看到问题所在时,我会踢自己......</p>

4

2 回答 2

1

使用返回值:

path, name = save()

里面的局部变量在save()它外面不可见(不存在)。

于 2013-01-20T06:36:14.823 回答
1

从根本上说,您的问题是您期望savePathsaveName处于全局范围内,它们仅在 function 中可用save()。您的直接问题可能会通过包括以下行来解决:

global saveName, savePath

save()函数的顶部。

是一篇很好的博客文章,解释了变量范围的一些差异。另请参阅Python global 的文档

也就是说:全局变量通常是有问题的设计的标志。特别是因为您不厌其烦地返回savePathand saveName,更好的解决方案是确保在返回它们时实际保存这些值:

(savePath, saveName) = save()

在这里,您再次节省了全局范围——但是当您将外部代码级别包装在一个函数中时,您将拥有更好的封装。

于 2013-01-20T06:37:13.923 回答