2

Pythonで変数の値(整数など)を保存する方法はありますか? 私の問題には、最終的にtxtファイルを作成する同じpythonスクリプト(python関数ではなくpythonファイル)を複数回呼び出す(入力および終了する)ことが含まれます。Pythonコードが呼び出された回数に応じて、txtファイルに名前を付けたいと思います:たとえば、txt1.txt、...、txt100.txt。

編集: 質問は、fortran の SAVE パラメーターとは関係ありません。私の間違い。

4

3 に答える 3

7

あまり。あなたができる最善のことは、グローバル変数を使用することです:

counter = 0
def count():
    global counter
    counter += 1
    print counter

グローバル ステートメントの必要性を回避する別の方法は、次のようになります。

from itertools import count
counter = count()
def my_function():
    print next(counter) 

あるいは:

from itertools import count
def my_function(_counter=count()):
    print next(_counter)

最終バージョンでは、関数がファースト クラス オブジェクトであり、いつでも属性を追加できるという事実を利用しています。

def my_function():
    my_function.counter += 1
    print my_function.counter

my_function.counter = 0 #initialize.  I suppose you could think of this as your `data counter /0/ statement.

ただし、実際にはカウントをファイルなどに保存したいようです。それも難しいことではありません。ファイル名を選択するだけです:

def count():
    try:
        with open('count_data') as fin:
            i = int(count_data.read())
    except IOError:
        i = 0
    i += 1
    print i
    with open('count_data','w') as fout:
        fout.write(str(i))
于 2013-05-02T15:59:52.540 に答える
1

mgilson の回答は、元の質問に対する適切なオプションを提供します。もう 1 つのアプローチは、コードをリファクタリングして、ファイル名の選択と計算 + 保存の問題を分離することです。コード スケッチを次に示します。

for i in ...:
   filename = 'txt%d.txt' % (i,)
   do_something_then_save_results(..., filename)

多くの場所でこれを行う必要があり、コードの重複を減らしたい場合は、ジェネレーター関数が役立ちます。

def generate_filenames(pattern, num):
   for i in xrange(num):
       yield pattern % (i,)

...
for filename in generate_filenames('txt%d.txt', ...):
   do_something_then_save_results(..., filename)

「...」をアプリケーションで意味のあるものに置き換えます。

于 2013-05-02T16:14:13.923 に答える