一連のテストを自動化しようとしていますが、パラメーターを変更するループが必要です。
mydictionary={'a':10,'b':100,'c':30}
def swapRules(d,rule):
"clear dict, set to 100 the rule that match the string"
print d, rule
if not d.has_key(rule): raise Exception("wrong string")
d=resetDict(d)
d[rule]=100
return d
def resetDict(d):
'''clear the dict '''
for i in d.keys():
d[i]=0
return d
def tests(d):
from itertools import starmap, repeat, izip
keys=d.keys()
paramsDictionaries=list(starmap(swapRules, izip(repeat(d),keys)))
print(paramsDictionaries)
test(mydictionary) を実行すると、出力に常に同じ値が含まれる理由がわかりません。問題は itertools の間違った使用法にあるようには見えません: REPL が単純なリスト内包表記に置き換えることで示すように:
In [9]: keys=mydictionary.keys()
In [10]: [tr.swapRules(mydictionary,jj) for jj in keys]
{'a': 0, 'c': 0, 'b': 100} a
{'a': 100, 'c': 0, 'b': 0} c
{'a': 0, 'c': 100, 'b': 0} b
Out[10]:
[{'a': 0, 'b': 100, 'c': 0},
{'a': 0, 'b': 100, 'c': 0},
{'a': 0, 'b': 100, 'c': 0}]
print ステートメントで示されているように、 swapRules 関数が単独で呼び出されると、期待される結果が生成されるため、私は本当に困惑しています...私が間違っていることについて何か考えはありますか? ひょっとして何かをキャッシュしているのですか?