"もしそうでなければ、それが渡されているリストの一部であるなら、forループを通して渡された変数を再定義することができないので、Pythonはこの種の機能を持たないと思われるでしょう" - これがほとんどのプログラミング言語のしくみです。この機能を有効にすることは、コードを鈍らせる副作用と呼ばれるものを作成するため、悪いことになります。
あなたは変数名からデータを維持する必要がありますので、また、これは一般的なプログラミングの落とし穴です:http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html(同様の質問の、特にリストを参照してください。あなたは、変数名を扱っていない場合でも、あなたは少なくともしようとしています変数名前空間を扱う)。救済策は「1つ上のレベル」で作業することです:この場合はリストまたはセットです。これがあなたの元の質問が妥当でない理由です。 (のpythonの一部のバージョンは、あなたがlocals()
辞書をハックできるようになるが、これはサポートされていないと文書化されていない行動と非常に悪いスタイルです。)
あなたはしかし、そうのような副作用を使用するのpythonを強制することができ
:
scores = [99.1, 78.3, etc.]
for i,score in enumerate(scores):
scores[i] = int(score)
上記の数値は、scores
配列の数値を丸めます。あなたがスコアにやりたい多くのものを持っている場合は
scores = [...]
roundedScores = [int(score) for score in scores]
:(あなたは要素の数百万で作業している場合を除く)ただし、これを行うには正しい方法はそうのようなscores
配列を再作成することです:
scores = [..., ..., ...]
def processScores(scores):
'''Grades on a curve, where top score = 100%'''
theTopScore = max(scores)
def processScore(score, topScore):
return 100-topScore+score
newScores = [processScore(s,theTopScore) for s in scores]
return newScores
追記:あなたはフロートの計算をやっている場合は、あなたがfrom __future__ import division
かのpython3を使用するか、明示的にfloat(...)
にキャストする必要があります。
実際に渡される内容を変更したい場合は、変更可能なオブジェクトを渡すことができます。あなたが渡している数字は、不変オブジェクトのインスタンスであるが、たとえば、あなたが持っていた:
class Score(object):
def __init__(self, points):
self.points = points
def __repr__(self):
return 'Score({})'.format(self.points)
scores = [Score(i) for i in [99.1, 78.3, ...]]
for s in scores:
s.points += 5 # adds 5 points to each score
これはまだ非機能物事を行う方法、およびすべての問題の副作用することが起こりやすくなり原因。
* "このような機能を備えていないのは愚かなようです。なぜなら、そうでなければ、forループで渡された変数を再定義することができないからです" - これがほとんどのプログラミング言語のしくみです。この機能を有効にすることは、コードを鈍らせる副作用と呼ばれるものを作成するため、悪いことになります。 – ninjagecko