Python

【Python】インクリメント・デクリメントをする方法

この記事では、Python でインクリメント・デクリメントする方法を解説します。

インクリメントとは、数値に 1 足すことを言います。逆に 1 減らすことをデクリメントと言う。Python では、++--演算子 が使用できません。

なので、代入演算子を使ってインクリメントやデクリメントを代用しましょう!

インクリメントの代用方法

Python でインクリメントするには、以下のように代入演算子の += を使うことで 1行で表現することができます。

inc = 0

inc += 1
print(inc)

inc += 1
print(inc)

実行結果

1
2

デクリメントの代用方法

デクリメントするには、以下のように代入演算子 -= を使います。

dec = 0

dec -= 1
print(dec)

dec -= 1
print(dec)

実行結果

-1
-2

for文の違い

C言語 の for文 では、以下のようにインクリメント・デクリメントを使ってループ処理していました。

int main() 
{
  for(int i = 0; i < 5; i++){
    printf("%d\n", i);
  }
}

実行結果

0
1
2
3
4

上記のコードを Python で記述すると以下のようになります。

for i in range(5):
    print(i)

実行結果

0
1
2
3
4

このように、Python ではインクリメント・デクリメントを使わずにループ処理を実装することができます。

for文を使ってループ処理をする方法

同様にデクリメントも可能です。

for i in range(5, 0, -1):
    print(i)

実行結果

5
4
3
2
1

range関数を使って数列を生成する方法を解説

クラスの特殊メソッドを使う

単項演算子用の特殊メソッドを定義することでインクリメント・デクリメントを実装することもできます。

class Num:
    def __init__(self, num):
        self.num = num
    
    # 特殊メソッド(+instance)
    def __pos__(self):
        print('インクリメント')
        self.num += 1
        return self.num

    # 特殊メソッド(-instance)
    def __neg__(self):
        print('デクリメント')
        self.num -= 1
        return self.num

# インスタンス化
zero = Num(0)

# インクリメント
+zero
print(f'zero.num = {zero.num}')

# デクリメント
-zero
print(f'zero.num = {zero.num}')

実行結果

インクリメント
zero.num = 1
デクリメント
zero.num = 0

クロージャを使う

クロージャを使うことで その関数を呼び出すたびに値をインクリメント・デクリメントさせるカウンターを作成することができます。

インクリメント

def inc():
    count = 0
    def inner_func():
        nonlocal count
        count += 1
        return count
    return inner_func

i = inc()

print(i())
print(i())
print(i())

実行結果

1
2
3

デクリメント

def dec():
    count = 0
    def inner_func():
        nonlocal count
        count -= 1
        return count
    return inner_func

i = dec()

print(i())
print(i())
print(i())

実行結果

-1
-2
-3

関数内の関数【内部関数とクロージャ】