-3

数週間前、私は Python の学習を始めました。そのコツをつかむ最善の方法は、簡単な (?) テキストベースのゲームを作成して、進行状況を保存し、保存したゲームを後で続けます。

(単純な文字列ではなく) 複数のネストされたリストと辞書を含む保存済みオブジェクトを作成するために必要なので、Pickle を使用しました。

問題は次のとおりです。save() 関数は単独では問題なく動作しますが、後でその中の 2 つの変数にアクセスする必要があります。何らかの理由で、私が何をしても、save() は savePath と saveName を返しません。NameError をスローします: savePath/saveName が定義されていません。私が行方不明になっているのは本当に愚かで明白なものだと確信していますが、何がわかりません。

PS コードがごちゃごちゃしていて申し訳ありません。まだ効率的なコーディング方法を学んでいません。

このために、機能する関数を切り取り、クラスを単純化しましたが、本質的に他のすべては同じです。

http://pastebin.com/x7UPYe5T

どんなアイデアでも大歓迎です。問題が何であるかを見ると、私は自分自身を蹴ることになるだろうと知っています…</p>

4

2 に答える 2

1

戻り値を使用します。

path, name = save()

内部のローカル変数save()は外部には表示されません (存在しません)。

于 2013-01-20T06:36:14.823 に答える
1

基本的に、あなたの問題は、関数でのみ利用できるグローバルスコープにいることを期待savePathしていることです。次の行を含めるだけで、差し迫った問題に対処できる可能性があります。saveNamesave()

global saveName, savePath

関数の上部にありsave()ます。

これは、変数のスコープの違いを説明する良いブログ投稿です。docs to Python globalも参照してください。

つまり、グローバル変数は、多くの場合、問題のある設計の兆候です。savePath特にとを返すのに苦労しているのでsaveName、より良い解決策は、それらを返すときにこれらの値を実際に保存することです。

(savePath, saveName) = save()

ここでも、グローバル スコープを節約していますが、その外部レベルのコードを関数でラップすると、カプセル化が向上します。

于 2013-01-20T06:37:13.923 に答える