【问题标题】:Python — Save System & Non-Returning Variables? [closed]Python — 保存系统和非返回变量? [关闭]
【发布时间】:2013-01-20 06:27:12
【问题描述】:

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

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

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

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

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

http://pastebin.com/x7UPYe5T

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

【问题讨论】:

  • 如果可能的话,这个问题应该是自给自足的。包括必要的内联代码(尝试删除与错误无关的部分)

标签: python variables return pickle savestate


【解决方案1】:

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

global saveName, savePath

save() 函数的顶部。

This 是一篇很好的博客文章,解释了变量范围的一些差异。另见docs to Python global

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

(savePath, saveName) = save()

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

【讨论】:

  • global 应该避免声明。比全局变量的扩散更糟糕的是非只读的全局变量。
【解决方案2】:

使用返回值:

path, name = save()

save() 内部的局部变量在其外部不可见(不存在)。

【讨论】:

  • 啊,非常感谢你们!我是个十足的笨蛋。我完全忘记了您实际上必须在变量变为全局变量之前对其进行设置。
猜你喜欢
  • 2020-06-22
  • 2013-11-15
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
相关资源
最近更新 更多