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行で評価までいけたからとりあえずいいかな?

他にいい方法あったらぜひぜひ教えていただきたいです。