Pythonには他の言語で言うところのインクリメントの式がない。
「i++」こういうやつ。
言うほど困らないのですが、例えば、
a["hoge"] = x[i++] a["fuga"] = x[i++]
みたいな事、書きたくなった時に1行で評価するの書けないので、
i += 1 a["hoge"] = x[i] i += 1 a["fuga"] = x[i]
みたいに書くしかない。
どうにかして「x[i++]」みたいな書き方したいなーと、やっきになってみた。
グローバル変数的なものとか、クラス変数みたいな外部に変数置くのは無しで。
結論:無理矢理出来た。
他にもいいやり方あるんだろうなーとは思いますが、ちょっと探してみても出てこなかったので記載。
- 結果のコード
def make_counter(): def count_up(dummy=[]): dummy.append(1) return len(dummy) return count_up counter = make_counter() x[counter()] = 1 x[counter()] = 2 x[counter()] = 3
Pythonの関数定義でdefault値を定義出来るのですが、このdefault値って結構特殊な動きをする。
公式にも確か注意してね、みたいな事が書いてあったと思う。
特にlistとかdictみたいなオブジェクトをdefault値にすると、デフォ値の参照が固定される。
def xyz(a=[]): a.append(1) print(a) xyz() -> [1] xyz() -> [1,1] xyz() -> [1,1,1] xyz() -> [1,1,1,1]
↑みたいな。で、この性質を使って無理矢理作った感じ。
めちゃんこダサいのですが、まー1行で評価までいけたからとりあえずいいかな?
他にいい方法あったらぜひぜひ教えていただきたいです。