Pythonで変数の値(整数など)を保存する方法はありますか? 私の問題には、最終的にtxtファイルを作成する同じpythonスクリプト(python関数ではなくpythonファイル)を複数回呼び出す(入力および終了する)ことが含まれます。Pythonコードが呼び出された回数に応じて、txtファイルに名前を付けたいと思います:たとえば、txt1.txt、...、txt100.txt。
編集: 質問は、fortran の SAVE パラメーターとは関係ありません。私の間違い。
Pythonで変数の値(整数など)を保存する方法はありますか? 私の問題には、最終的にtxtファイルを作成する同じpythonスクリプト(python関数ではなくpythonファイル)を複数回呼び出す(入力および終了する)ことが含まれます。Pythonコードが呼び出された回数に応じて、txtファイルに名前を付けたいと思います:たとえば、txt1.txt、...、txt100.txt。
編集: 質問は、fortran の SAVE パラメーターとは関係ありません。私の間違い。
あまり。あなたができる最善のことは、グローバル変数を使用することです:
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))
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)
「...」をアプリケーションで意味のあるものに置き換えます。